2015-12-27 62 views
1

在我的反应原生代码中,我在模块的多个位置使用了bind(this)var self = this;bind和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); 
    }); 
    

缺点如果他们都做同样的工作,我很想知道什么是正确的做法?使用其中一个还是有问题?还是有更好的方法来做到这一点?

+1

这两个工作正常。我会尽量在应用程序或至少一个模块中保持一致。 –

+2

ES6箭头功能是更好的方法。 – Oriol

+0

感谢Robert :)只是想知道,如果我做了'''if if(self === this)''''返回true。那么,有没有办法摧毁自我?如果这是我可以完成的一个对象 - '''self = {}'''。在这种情况下,我应该将自我指向null吗? – bozzmob

回答

5

鉴于您的目标是实现ES2015的Node.js,您最好使用箭头函数。 箭功能有所谓的lexicalthis,这意味着一个箭头函数变量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。它更加结构化,更接近于功能性方法,这使得代码更容易推理,就像您通过使用promise所发现的一样。它也似乎是slightly more performant

相关问题