我已经阅读了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
的文档为什么我们不能直接访问this.prop,而是必须编写一个函数以返回this.prop?
var test = {
prop: 42,
func: function() {
return this.prop;
},
directAccess: this.prop
};
console.log(test.func());
// expected output: 42
console.log(test.directAccess);
// expected output: 42
// actual output: undefined
答案 0 :(得分:3)
这与上下文有关,在构造对象test
时,this
上下文是创建对象的父作用域。
调用该函数时,您的作用域现在是test
的作用域,此时它确实具有prop
的属性。
答案 1 :(得分:0)
您可以直接访问prop
。但是,执行此操作的方法是使用test.prop
。
在JavaScript中,this
是一个特殊变量,设置为函数调用的“接收器”,即点左侧的对象。当你写
test.func()
然后test
是接收者,因此this
指向函数内部的test
。
对于directAccess
,没有任何功能。在{em> defined 中定义this.prop
时对表达式test
进行求值。此时,this
可能是JavaScript的默认对象,它没有名为prop
的属性,因此您不确定。
您可能已经习惯Java,其中类内的this
始终引用类本身的实例。在JavaScript中这种方式不起作用。