bind和var self之间的区别=这个?

时间:2015-12-27 19:13:39

标签: javascript reactjs this bind react-native

在我的反应原生代码中,我在模块的多个位置同时使用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);
    });
    
  3. 考虑到他们都做同样的工作,我很想知道什么是正确的方法呢?使用其中一个是否有问题?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

鉴于您正在瞄准实施ES2015的Node.js,您最好使用箭头功能。 箭头函数具有所谓的 lexical this,这意味着箭头函数中的变量this被视为普通变量,并且将是 closed over

所以你的代码变成了:

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。它更加结构化,更接近功能性方法,这使得代码更易于推理,就像您必须通过使用promises发现的那样。它似乎也是slightly more performant