javascript - 如何将箭头函数重写为常规函数并绑定(bind)上下文?

标签 javascript ecmascript-6 arrow-functions

<分区>

我正在检查 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);

 }

最佳答案

function() {} 语法不会将局部上下文绑定(bind)到函数,这就是为什么 this.setStatethis.state.something 失败,因为 this 是由全局词法上下文定义的,而 state 不存在于其中。如果你想实现这一点,你必须手动绑定(bind)函数:

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

关于javascript - 如何将箭头函数重写为常规函数并绑定(bind)上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690195/

相关文章:

javascript - useEffect inside material ui 选项卡隐藏第三个选项卡

javascript - ISP注入(inject)广告导致js无法正常运行

javascript - 颤振网络 : SPA: Open Graph: Dynamically assign og:image meta tags

javascript - 用于对象叠瓦的漂亮 JavaScript 模式(模拟多重继承)

javascript - 如何在 TypeScript 中编写 ES6 箭头函数?

javascript - 在 TypeScript 中使用箭头函数 : how to make them class methods?

javascript - 使用 ng-class 的指令

javascript - 在 JavaScript 中,有没有一种方法可以以编程方式允许浏览器在无限循环内接收用户事件?

javascript - TypeScript 箭头函数到字符串更改语法

javascript - ES6 groupBy,分区,排序对象列表