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/