关于this指向问题

var ninja1 = {
 whoAmI:function(){return this;}
}
var ninja2 = {
 whoAmI:ninja1.whoAmI
}
console.log(ninja2.whoAmI() === ninja2);

结果返回true

function Ninja(){
 this.whoAmI=()=>this;
}
var ninja1 = new Ninja();
var ninja2 = {
 whoAmI:ninja1.whoAmI
}
console.log(ninja2.whoAmI() === ninja2);

结果返回false

为什么代码2中ninja2.whoAmI() === ninja1 ?用到了构造函数,ninja2.whoAmI上下文this就不等于ninja2了?

阅读 1.2k
1 个回答

在箭头函数中,this的引用值是定义箭头函数的上下文,所以Ninja构造函数中的函数返回的this是固定的。
这个this等于Ninja的this,也就是 this.whoAmI 这个里面的this。
构造函数实例化之后这个this的引用值就是这个实例,也就是ninja1。
所以最后的是false呀

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题