为什么此代码返回始终未定义?

时间:2016-10-31 12:44:33

标签: javascript ecmascript-6

我开始学习ES6&写了这段代码:



let dog = {
      s:'Woff',
      talk:()=>{console.log(this.s)}
    };
    dog.talk();
    let x = dog.talk;
    x();
    x.bind(dog)();




为什么它总是返回undefined而不是' Woff' ?我认为只有1行返回undefined但我们有3个未定义。

1 个答案:

答案 0 :(得分:6)

你定义了"谈话"属性值作为箭头函数,这意味着该函数中this的值将是this在函数定义的上下文中的值。那个"狗"对象,它是this语句出现的地方let

如果您使用常规功能,您的代码将按预期工作:

let dog = {
  s:'Woff',
  talk: function(){ console.log(this.s); }
};
console.log(dog.talk());

现在,除了this问题之外,您的#34;谈话"函数不返回任何内容,因此将调用结果传递给函数将始终返回undefined。 (在箭头函数版本中,可能是一个返回值,如果它是一个单语句无支撑函数体,但它已经{{ 1}}因为undefined没有返回任何内容。)所以:

console.log()

现在你会看到" Woff"来自函数中的let dog = { s:'Woff', talk: function(){ console.log(this.s); return this.s; } }; console.log(dog.talk()); ,也来自外部console.log()