在 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; }
};
or
var chopper = {
owner: 'John',
getOwner: () => (this.owner)
};
我收到一条错误消息,表明该方法无权访问this
。这只是一个语法问题,还是不能在 ES6 对象中使用粗箭头方法?
箭头函数并非设计为仅作为老式函数的较短版本在所有情况下使用。它们并不旨在使用以下方式替换函数语法function
关键词。箭头函数最常见的用例是不重新定义的短“lambda”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;
}
};
(它们之间存在细微差别,但只有在您使用时它们才重要super
in getOwner
,你不是,或者如果你复制getOwner
到另一个对象。)
在 es6 邮件列表上存在一些关于箭头函数的争论,这些函数具有相似的语法,但有自己的特点this
。然而,这个提议并没有得到很好的接受,因为这只是语法糖,允许人们节省输入几个字符,并且没有为现有函数语法提供新功能。看主题未绑定的箭头函数.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)