gpt4 book ai didi

javascript - promise 实际 self 实现

转载 作者:行者123 更新时间:2023-12-03 04:30:20 28 4
gpt4 key购买 nike

我想将数据传递给 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)

最佳答案

这是因为本地 this 变量逃逸了作用域。您需要将其绑定(bind)到当前实例。

function Promises(callback){
if(callback){
callback(Promises.prototype.resolve.bind(this), Promises.prototype.reject.bind(this));
}
}

否则,passedResolve 函数将被分配给另一个对象。因此,当 Promises 想要它时,它会变得未定义。我希望这是有道理的。

如您所见,JavaScript 对象到处都有一些怪癖。

关于javascript - promise 实际 self 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43519368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com