我有一个 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); // logs "opts" object
return deferred.promise;
};
MyClass.prototype.method2 = function(method1resolve){
// ...q stuff...
console.log(this); // logs undefined
return deferred.promise;
};
MyClass.prototype.method3 = function(method2resolve){
// ...q stuff...
console.log(this); // logs 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
杀掉了吗?
this
的知识。 - 4Z4T4RsetTimeout
问题的重复;因为这个问题出现在两种完全不同的方式中。希望解决promise上下文中的this
作用域问题的人们会立即被引导到一个更间接的问题,其中被接受的答案使用了2009年的反模式。2 + 2 = 4
!==((8+2)*6)/15 = 4
- SteamDev