承诺实践自我实施

时间:2017-04-20 12:20:16

标签: javascript es6-promise prototype-programming

我想将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}}

1 个答案:

答案 0 :(得分:1)

这是因为本地this变量会转义范围。您需要将其绑定到当前实例。

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

否则,passedResolve函数将被分配到另一个对象中。因此,当Promises想要它时,它会获得undefined。我希望这是有道理的。

正如您所见,JavaScript对象在这里和那里有一些怪癖。