[Javascript] this keyword exercise
function logThis() {
console.log(this)
}
const obj = {
logThis,
logThis2() {
logThis()
},
logThis3() {
obj.logThis()
}
}
obj.logThis();
obj.logThis2();
obj.logThis3();
Answer:
obj.logThis(); // obj
obj.logThis2(); // window
obj.logThis3(); // obj
// What will the this keywoard refer to for each invocation
const objA = {
foo() {
console.log("objA function", this)
},
bar: () => {
console.log("objA arrow =>", this)
}
}
const objB = {
foo: objA.foo,
bar: () => {
console.log("objB arrow => ", this) // window
objA.bar()
},
baz() {
console.log("objB function", this) // objB
objA.foo()
}
}
Answer:
objB.foo(); // objB
objB.bar(); // Window
objB.baz(); // objA
foo: objA.foo
: due to there is no invocation, when we call objB.foo()
, it is invoked on objB
, and also on objA
, foo
is function syntax, so the this
points to the invocator which is objB
.
Now if we change a little bit:
const objA = {
foobar: ()=> {
console.log("objA foobar arrow =>", this)
},
}
const objB = {
foobar: objA.foobar,
}
objB.foobar()
Now the answer should be window
, because for arrow function
, the this
keyword is determined by the the lexical environment in which the arrow function was defined NOT invoked. So this should be window
const obj = {
logThis() {
console.log(this)
},
logThis2() {
function logThisInner() {
console.log(this)
}
return logThisInner.apply(this)
}
}
const {logThis, logThis2} = obj
logThis() // window
logThis2() // window
obj.logThis() // obj
obj.logThis2() // obj
After using destriucting, logThis()
and logThis2()
has no directly obj call. So the this
keyword is window
If you want to fix this:
logThis.call(obj)
logThis2.call(obj)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2016-02-29 [Immutable,js] Immutable.Record() as data models
2016-02-29 [Hapi.js] Friendly error pages with extension events
2016-02-29 [Hapi.js] Extending the request with lifecycle events
2016-02-29 [Hapi.js] POST and PUT request payloads
2016-02-29 [Hapi.js] View engines