我已经阅读了Java语言中的箭头功能和常规功能之间的区别,因此我做了一个小小的node.js演示项目来了解我已经做过的事情。学到的。
let name = 'file Scope'
class User {
name = "Class Scope"
arrow = () => {
console.log("Arrow name " + this.name);
}
normal() {
console.log("Normal name " + this.name);
}
test() {
return {
name: "Object Scope",
n: this.normal,
a: this.arrow,
nested: {
name: 'Nested Object Scope',
nestedNormal: function () {
console.log("Nested Normal " + this.name);
},
nestedArrow: () => {
console.log("Nested Arrow " + this.name);
}
}
}
}
}
let user = new User();
user.test().n(); //Normal name Object Scope
user.test().a();//Arrow name Class Scope
user.test().nested.nestedNormal();//Nested Normal Nested Object Scope
user.test().nested.nestedArrow();//Nested Arrow Class Scope
没有控制台输出,我认为 nestedArrow()函数将返回 Object Scope ,但否则返回 Class Scope 。
为什么“ this.name”是引用类中的名称而不是嵌套对象内部的名称?
答案 0 :(得分:1)
箭头函数在test()
函数内部声明,因此它从该函数获取this
的值。
您呼叫了user.test()
,因此在test
内,this
的值与user
的值相同。
user.name
是"Class Scope"
。