JavaScript嵌套对象与闭包中this关键字的疑问及理解求证
JavaScript中this绑定的两个问题解答
问题1:为什么控制台输出Window对象?
对应的代码:
const obj = { name: "Cristiano", lname: "Ronaldo", getName: function () { function another() { console.log(this); } another(); }, }; obj.getName();
普通函数的this是动态绑定的,完全由函数的调用方式决定:
- 当你执行
obj.getName()时,getName作为obj的方法被调用,所以getName内部的this指向obj。 - 但内部的
another是独立的普通函数,你直接以another()的形式调用它(没有通过对象挂载、call/apply/bind指定绑定对象),在非严格模式下,这种默认调用的this会绑定到全局对象——浏览器环境中就是Window。
如果想让another的this指向obj,可以改用another.call(this)、another.bind(this)(),或者把another改成箭头函数。
问题2:你的理解正确吗?
对应的代码:
const obj = { name: "Cristiano", lname: "Ronaldo", moreObj: { name: "Siiii", getName: function () { const named = () => this.name; console.log(named()); }, }, }; obj.moreObj.getName();
你的理解是正确的,这段代码确实会输出Siiii,再补充一点细节帮你巩固:
getName是普通函数,作为moreObj的方法调用,所以getName内部的this指向moreObj。- 箭头函数的
this是词法绑定,它不会自己绑定this,而是直接继承外层作用域(这里就是getName的作用域)的this值,所以named里的this就是moreObj,this.name自然就是moreObj.name,也就是Siiii。
内容的提问来源于stack exchange,提问作者Aryan Shridhar
相关产品推荐
相关产品推荐

