为什么在使用promises时,类方法中的'this'未定义?
为什么在使用promises时,类方法中的'this'未定义?
我有一个JavaScript类,每个方法都返回一个Q
promise。我想知道为什么method2
和method3
中的this
是未定义的。有没有更正确的方式来编写这段代码?
function MyClass(opts){ this.options = opts; return this.method1() .then(this.method2) .then(this.method3); } MyClass.prototype.method1 = function(){ // ...q stuff... console.log(this.options); // 记录 "opts" 对象 return deferred.promise; }; MyClass.prototype.method2 = function(method1resolve){ // ...q stuff... console.log(this); // 记录 undefined return deferred.promise; }; MyClass.prototype.method3 = function(method2resolve){ // ...q stuff... console.log(this); // 记录 undefined return deferred.promise; };
我可以通过使用bind
来修复这个问题:
function MyClass(opts){ this.options = opts; return this.method1() .then(this.method2.bind(this)) .then(this.method3.bind(this)); }
但不太确定为什么需要使用bind
;是否.then()
导致this
被删除?