我想将then
方法传递给this.passedResolve
方法,但当我通过提供undefined
时,它会获得 function Promises(callback){
if(callback){
callback(Promises.prototype.resolve, Promises.prototype.reject);
}
}
Promises.prototype.resolve = function(data){
this.passedResolve = data;
}
Promises.prototype.reject = function(err){
console.log(new Error(err));
}
Promises.prototype.thens = function(cb){
cb(this.passedResolve);
}
function loadImg(url){
return new Promises(function(resolve, reject){
var el = new Image()
el.onload = function(){
resolve(el)
}
el.onerror = function(){
reject('Error')
};
el.src = url;
})
}
loadImg('https://s-media-cache-ak0.pinimg.com/736x/12/64/da/1264da4a3f18207dc22592102abae40d.jpg').thens(function(e){
console.log(e)
})
var x = new Promises()
console.log(x)
{{1}}
答案 0 :(得分:1)
这是因为本地this
变量会转义范围。您需要将其绑定到当前实例。
function Promises(callback){
if(callback){
callback(Promises.prototype.resolve.bind(this), Promises.prototype.reject.bind(this));
}
}
否则,passedResolve
函数将被分配到另一个对象中。因此,当Promises
想要它时,它会获得undefined
。我希望这是有道理的。
正如您所见,JavaScript对象在这里和那里有一些怪癖。