提问人:fox 提问时间:6/28/2015 最后编辑:Sebastian Simonfox 更新时间:5/28/2022 访问量:62110
ES6 对象中的方法:使用箭头函数
Methods in ES6 objects: using arrow functions
问:
在 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)
};
我收到一条错误消息,提示该方法无权访问 。这只是一个语法问题,还是你不能在 ES6 对象中使用胖箭头方法?this
答:
在这一行中应该是:getOwner: () => this.owner
var chopper = {
owner: 'John',
getOwner: () => this.owner
}; //here `this` refers to `window` object.
console.log(chopper.getOwner());
您必须在函数中声明:this
var chopper = {
owner: 'John',
getOwner() { return this.owner }
};
console.log(chopper.getOwner());
艺术
var chopperFn = function(){
this.setOwner = (name) => this.owner = name;
Object.assign(this,{
owner: 'Jhon',
getOwner: () => this.owner,
})
}
var chopper = new chopperFn();
console.log(chopper.getOwner());
chopper.setOwner('Spiderman');
console.log(chopper.getOwner());
评论
"TypeError: Cannot read property 'owner' of undefined\n at Object.chopper.getOwner
this
this
不一定是指 .它指的是封闭环境中的当前值,可能是也可能不是。也许这就是你的意思。只是想确保他明白这不是某个默认值。window
this
window
this
var chopperFn = function() { this.owner = 'Jhon'; this.getOwner = () => this.owner; }
箭头函数并非设计为在每种情况下都仅作为老式函数的较短版本使用。它们不打算使用关键字替换函数语法。箭头函数最常见的用例是作为不重新定义的短“lambdas”,通常用于将函数作为回调传递给某个函数。function
this
箭头函数不能用于编写对象方法,因为正如您所发现的,由于箭头函数位于词法封闭上下文的上方,因此箭头内的箭头是定义对象的当前箭头。也就是说:this
this
// Whatever `this` is here...
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner; // ...is what `this` is here.
}
};
在你的例子中,想要在对象上编写方法,你应该简单地使用传统语法,或者ES6中引入的方法语法:function
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
// or
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(它们之间有细微的差异,但只有在 中使用 时才重要,但事实并非如此,或者复制到另一个对象时才重要。super
getOwner
getOwner
在 es6 邮件列表上有一些关于箭头函数的转折的争论,这些函数具有相似的语法,但有自己的 .然而,这个提议没有得到很好的接受,因为它只是语法糖,允许人们节省输入几个字符,并且没有提供比现有函数语法更新的功能。请参阅主题未绑定箭头函数。this
评论
this.owner
此内部箭头函数不反映对象的上下文。相反,它提供了调用对象方法的上下文。
检查一下,这提供了一些关于何时使用箭头和何时不使用箭头的见解。 https://dmitripavlutin.com/when-not-to-use-arrow-functions-in-javascript/
评论
this
如果必须使用箭头功能,可以改为 ,this
chopper
var chopper = {
owner: "John",
getOwner: () => chopper.owner
};
尽管这不是最佳做法,但在更改对象名称时,必须更改此箭头函数。
我遵循的快速提示使用箭头函数。
- 对将使用语法的方法使用非箭头函数。(这些函数将从其调用方接收有意义的值。
object.method()
this
- 对几乎所有其他事情都使用箭头函数。
另一个提示,在严格模式下,仍然引用 Window 而不是 undefined。this
(() => {
"use strict";
console.log(this); // window
})();
(function () {
"use strict";
console.log(this); // undefined
})();
评论
this
chopper
this
console.log()