这道js题目,原理是什么?

1.

var fullname = 'John Doe';
var age = 20;
var obj = {
fullname: 'Colin Ihrig',
prop: {
fullname: 'Aurelio De Rosa',
age: 40,
getFullname: function() {
return this.fullname;
},
getAge: () => {
return this.age;
}
}
};

console.log(obj.prop.getFullname());
console.log(obj.prop.getAge());

var test = obj.prop.getFullname;
var test1 = obj.prop.getAge;
console.log(test());
console.log(test1());

运行结果

"Aurelio De Rosa"
20
"John Doe"
20


第一个是“Aurelio De Rosa”还可以理解,
但其他的为什么运行结果是这样?

阅读 1.4k
1 个回答

1."Aurelio De Rosa"
这个可以理解,不说了

2.20
箭头函数的this指向为window,所以获取的是window.age
可以把getAge的代码改写成这样

getAge: () => {
      console.log(this === window);// 输出为true
      return this.age;
    }

3."John Doe"
将对象里的一个方法赋值出去,其this值会丢失。熟悉javascript面向对象的应该知道,想要这里的this不丢失,就应该在obj的constructor(构造函数)里,执行this.getFullname = this.getFullname.bind(this);
用过react的应该很熟悉这句话,就是react的组件构造函数里常用的一句话

4.20
如果理解了2和3,那么这里是20也就很容易理解了

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