bind和var self之间的差异=this

Difference between bind and var self=this?

本文关键字:this 之间 var self bind      更新时间:2023-09-26

在我的react本机代码中,我在模块的多个位置同时使用bind(this)var self = this;

两者都在正确的位置解决了this关键字的解析问题。

以下是我的代码(执行相同功能的2个代码)-

  1. 使用bind(this)

    retval.then(function (argument) {
        console.log("argument"+JSON.stringify(argument));
        this.stateSetting(argument);
    }.bind(this));
    
  2. 使用var self = this

    var self = this;
    retval.then(function (argument) {
       console.log("argument"+JSON.stringify(argument));
       self.stateSetting(argument);
    });
    

考虑到他们都做同样的工作,我很想知道什么是正确的方法?使用其中一个或另一个有问题吗?或者有更好的方法吗?

考虑到您的目标是实现ES2015的Node.js,您最好使用箭头函数。箭头函数具有所谓的词法this,这意味着箭头函数中的变量this被视为正常变量,并且在创建函数时将被封闭在上。

所以你的代码变成:

retval.then((argument) => {
    console.log("argument"+JSON.stringify(argument));
    // "this" will inherit the value of the outside scope
    this.stateSetting(argument); 
});

如果目标是ES5(较旧的浏览器),那么我更喜欢.bind样式而不是var self = this。它更结构化,更接近于函数方法,这使得代码更容易推理,就像你通过使用promise发现的那样。它似乎也更具表演性。