我开始学习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个未定义。
答案 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()
。