[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 objAfoois function syntax, so the thispoints 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 thiskeyword is window

 

If you want to fix this:

logThis.call(obj)
logThis2.call(obj)

 

posted @   Zhentiw  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源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
点击右上角即可分享
微信分享提示