在以下示例中,我发现 this 关键字的值意外:
let x = {
z : 10 ,
get func1() {
return function(v) {
console.log(this === v);
}
}
}
x.func1(x)
this 关键字的值是对象 x ,就好像是从该对象执行的一样,我希望只有 get函数具有< em> this 关键字等于调用对象 x
此示例向我们展示了差异
let x = {
func2() {
return function(v) {
console.log(this === v);
}
}
}
x.func2()(x);
在两个示例中,作为吸气功能的 func1 和作为对象方法的 func2 均从对象 x 执行,然后执行返回的函数。那么为什么第一个示例中的 this 值不等于全局对象而不是对象 x 。
答案 0 :(得分:13)
这是一个非常有趣的问题。
这是因为在属性访问结果后立即调用了该函数。因此,这些从根本上是等效的:
let x = {
get func1() {
return function(v) {
console.log(this === v);
};
},
func2(v) {
console.log(this === v);
}
};
x.func1(x);
x.func2(x);
在两种情况下:
func1
是访问者属性而func2
是数据属性的事实并不重要。重要的是使用读取属性产生的值。