ES6对象中的方法:使用箭头函数

在ES6中,这两个都是合法的:

var chopper = { owner: 'Zed', getOwner: function() { return this.owner; } }; 

并简写为:

 var chopper = { owner: 'Zed', getOwner() { return this.owner; } } 

是否也可以使用新的箭头function? 在尝试类似的东西

 var chopper = { owner: 'John', getOwner: => { return this.owner; } }; 

要么

 var chopper = { owner: 'John', getOwner: => (this.owner) }; 

我收到一条错误消息,提示该方法没有访问权限。 这只是一个语法问题,或者你不能在ES6对象内使用fat-pipe方法吗?

箭头function并不是被devise用于每一种情况,而仅仅是作为旧式function的缩短版本。 它们不打算用function关键字replace函数语法。 箭头函数最常见的用例就是简短的“lambda”,它不重新定义this函数,在将函数作为callback函数传递给函数时经常使用。

箭头函数不能用来写对象方法,因为正如你所发现的那样,由于箭头函数假定了this词法封闭的函数上下文,所以在一个对象定义中, this函数是窗口或其他东西:

 var foo = { bar: () => this.baz // this is window or something else } 

在你的情况下,想要在对象上编写一个方法,你应该简单地使用标准function syntax ,或者ES6中引入的“简写方法名称”。

在es6的邮件列表上有一些关于箭头函数的扭曲,这些函数有类似的语法,但是有自己的this 。 然而,这个提议并没有得到很好的接受,因为这仅仅是语法糖,人们可以节省input几个字符,并且不会提供比现有函数语法更多的新function。 请参阅主题未绑定的箭头函数 。

以前的build议是用“简洁的机构”来减less笔画数量,这样就不用写return

 var foo = { function bar() this.baz ^^^^^^^^ "concise body" } 

但由于可分析性原因,这被拒绝了。

在这一行getOwner: => (this.owner)应该是:

 var chopper = { owner: 'John', getOwner: () => this.owner }; //here `this` refers to `window` object. 

你将不得不声明this函数:

 var chopper = { owner: 'John', getOwner() { return this.owner } }; 

要么:

 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()); 

这个内部箭头函数不反映对象的上下文。 相反,它提供了调用对象方法的上下文。

检查一下,这给了一些关于什么时候使用箭头和什么时候不使用的见解。 https://dmitripavlutin.com/when-not-to-use-arrow-functions-in-javascript/