【发布时间】:2019-02-14 12:15:53
【问题描述】:
我正在检查 ES6 中引入的箭头函数。如果我有这段带有“addNinja”功能的代码:
addNinja=(ninja)=>{
ninja.id=Math.random();
let ninjas=[...this.state.ninjas,ninja];
this.setState({
ninjas:ninjas
})
console.log(this.state);
}
有没有什么方法可以在没有箭头函数的情况下编写?
如果我考虑到这两个是相同的......
x=>x*2
function(x){
return x*2;
}
我假设我可以像下面的代码那样重写 addNinja 函数,但我得到一个错误。
addNinja=function(ninja){
ninja.id=Math.random();
let ninjas=[...this.state.ninjas,ninja];
this.setState({
ninjas:ninjas
})
console.log(this.state);
}
【问题讨论】:
-
“但我得到一个错误” - 错误消息可能是关于错误是什么的线索。虽然如果我猜我会认为
this的绑定在两者之间是不同的。 -
不幸的是,仅将箭头函数转换为常规函数不太可能工作,因为在两种情况下处理
this的方式不同。 -
错误是:Cannot read property 'ninjas' of undefined
-
“如果我考虑到这两个是相同的......”你会相信谎言。箭头函数不能成为方法(即不要将
this设置为像“正确”函数那样的接收器对象,而是将this视为关闭下的任何其他变量)。
标签: javascript ecmascript-6 arrow-functions