为什么我不能直接在此对象内访问属性?

时间:2019-06-26 02:53:47

标签: javascript

我已经阅读了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

2 个答案:

答案 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中这种方式不起作用。