Javascript 如何将arrow函数重新写入常规函数并绑定上下文?

Javascript 如何将arrow函数重新写入常规函数并绑定上下文?,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我正在检查ES6中引入的箭头函数。如果我有一段带有函数“addNinja”的代码: addNinja=(ninja)=>{ ninja.id=Math.random(); 让忍者=[…这个。状态。忍者,忍者]; 这是我的国家({ 忍者:忍者 }) console.log(this.state); }函数(){}语法没有将本地上下文绑定到函数,这就是为什么this.setState或this.state.something失败的原因,因为this是由全局词汇上下文定义的,而state不存在于其中

我正在检查ES6中引入的箭头函数。如果我有一段带有函数“addNinja”的代码:

addNinja=(ninja)=>{
ninja.id=Math.random();
让忍者=[…这个。状态。忍者,忍者];
这是我的国家({
忍者:忍者
})
console.log(this.state);
}
函数(){}语法没有将本地上下文绑定到函数,这就是为什么
this.setState
this.state.something
失败的原因,因为
this
是由全局词汇上下文定义的,而
state
不存在于其中。如果要实现此目的,必须手动绑定函数:

constructor(props) {
  this.addNinja = this.addNinja.bind(this);
}

addNinja=function(ninja){
         ninja.id=Math.random();
         let ninjas=[...this.state.ninjas,ninja]; 
         this.setState({
             ninjas:ninjas
         })
        console.log(this.state);
}

“但我有一个错误”-错误信息可能是关于错误是什么的线索。但是如果我猜的话,我会认为这两种情况下的绑定不同。不幸的是,仅仅将箭头函数转换为常规函数不太可能起作用,因为在这两种情况下处理这两种情况的方式不同。错误是:无法读取未定义的属性“ninjas”“如果我考虑到这两个是相同的…”你会相信错误。箭头函数不能成为方法(即,不要像“正确”函数一样将
设置为接收器对象,而是将
视为关闭下的任何其他变量)。不太可能
未定义的
-它将由其词法上下文定义,很可能是全局对象。不过+1.正确,谢谢,更新了应答刚刚调用
this.addNinja.bind(this)
不会有帮助,你需要对结果做些什么。另外,这看起来像是一个
主体,然后你应该使用
addNinja的方法语法
我知道我忘记了一件事:p只是一个简单的问题:你能将类方法绑定到构造函数之外的其他地方吗?如果可以,那么这样做的好处是什么你在那儿玩吗?