在我的反应原生代码中,我在模块的多个位置同时使用bind(this)
和var self = this;
。
两者都解决了在正确位置解析this
关键字的问题。
以下是我的代码(执行相同功能的2个代码) -
使用bind(this)
retval.then(function (argument) {
console.log("argument"+JSON.stringify(argument));
this.stateSetting(argument);
}.bind(this));
使用var self = this
var self = this;
retval.then(function (argument) {
console.log("argument"+JSON.stringify(argument));
self.stateSetting(argument);
});
考虑到他们都做同样的工作,我很想知道什么是正确的方法呢?使用其中一个是否有问题?或者有更好的方法吗?
答案 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。