在 ES6 中,这两个都是合法的:
var chopper = {
owner: 'Zed',
getOwner: function() { return this.owner; }
};
并且,作为速记:
var chopper = {
owner: 'Zed',
getOwner() { return this.owner; }
}
是否也可以使用新的箭头功能?在尝试类似的东西时
var chopper = {
owner: 'John',
getOwner: () => { return this.owner; }
};
或
var chopper = {
owner: 'John',
getOwner: () => (this.owner)
};
我收到一条错误消息,提示该方法无法访问 this
。这只是一个语法问题,还是您不能在 ES6 对象中使用粗箭头方法?
最佳答案
箭头函数并非设计用于所有情况,而只是作为老式函数的简化版本。它们并非旨在使用 function
关键字替换函数语法。箭头函数最常见的用例是短的“lambdas”,它不重新定义 this
,通常在将函数作为回调传递给某个函数时使用。
箭头函数不能用于编写对象方法,因为正如您所发现的,由于箭头函数关闭词法封闭上下文的 this
,因此 this
在箭头是您定义对象的当前箭头。也就是说:
// Whatever `this` is here...
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner; // ...is what `this` is here.
}
};
在你的例子中,想要在一个对象上写一个方法,你应该简单地使用传统的 function
语法,或者 ES6 中引入的方法语法:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
// or
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(它们之间有细微差别,但只有当您在 getOwner
中使用 super
时它们才重要,而您不是,或者如果您复制 getOwner
到另一个对象。)
在 es6 邮件列表上有一些关于箭头函数的扭曲的争论,箭头函数具有相似的语法但有自己的 this
。然而,这个提议并没有得到很好的接受,因为它只是语法糖,让人们可以节省输入几个字符,并且没有提供比现有函数语法更多的新功能。见题目unbound arrow functions .
关于javascript - ES6 对象中的方法 : using arrow functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095710/