为什么在使用promises时,类方法中的'this'未定义?

12 浏览
0 Comments

为什么在使用promises时,类方法中的'this'未定义?

我有一个JavaScript类,每个方法都返回一个Q promise。我想知道为什么method2method3中的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被删除?

0