gpt4 book ai didi

javascript - ES6 对象中的方法 : using arrow functions

转载 作者:IT王子 更新时间:2023-10-29 02:55:44 27 4
gpt4 key购买 nike

在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com