在我的反应本机代码中,我在模块中使用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); });
考虑到他们都做同样的工作,我很想知道什么是正确的方法呢?使用其中一个是否有问题?或者有更好的方法吗?
鉴于您的目标是实现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
.它更结构化,更接近功能方法,这使得代码更容易推理,就像你必须通过使用promises发现的那样.它似乎也稍微高效一点.