在对象方法中获取未定义

时间:2018-04-17 10:28:53

标签: javascript arrow-functions

为什么我得到undefined?所以我认为这是箭头功能中的一个问题......  我需要通过方法say

中的箭头函数来使其工作
const obj = {
                a: 42,
                say:  () => {
                    console.log(this.a);
                }
            };

            obj.say();

2 个答案:

答案 0 :(得分:1)

不要使用箭头功能,因为它们没有自己的this。因此,this(如果是箭头函数)将指向封闭上下文。

 var obj = {
      a: 42,
      say: function() { 
          console.log(this.a);
      }
 };

 obj.say();

答案 1 :(得分:1)

正如其他答案所解释的那样,Arrow Functions没有this个值。

如果您想要类似的简明语法,您可能需要尝试ES6 Method Definition语法,该语法具有this值,并且短于整个function(){...}

var obj = {
  a: 42,
  say() {
    console.log(this.a);
  }
}

如果你像这样构建你的应用程序,那么整个生猪并使用ES6 Classes可能是有意义的。

除了愚蠢之外,显然你可以做到以下几点:

var obj = {
  a: 42,
  say() {
    console.log(obj.a); //obj not this
  }
}