promise源码中的this.constructor !== Promises的作用

看了promise的源码core.js对代码中的this.constructor !== Promises实在不是很理解.


Promise.prototype.then = function(onFulfilled, onRejected) {
    if (this.constructor !== Promises) {
        return safeThen(this, onFulfilled, onRejected);
    }
    var res = new Promises(noop);
    handle(this, new Handler(onFulfilled, onRejected, res));
    return res;
};

function safeThen(self, onFulfilled, onRejected) {
    return new self.constructor(function (resolve, reject) {
        var res = new Promises(noop);
        res.then(resolve, reject);
        handle(self, new Handler(onFulfilled, onRejected, res));
    });
}
this.constructor !== Promises

这个new promise才能读取到.then那这个this肯定都是这个实例
请问怎么样才能执行safeThen函数里面的代码

阅读 2.2k
2 个回答

看了下safeThen方法,this.constructor的构造函数应该和Promsie构造函数一样,接收一个方法,并传入resolve,reject参数。
那么this.constructor !== Promises是为了判断,this. constructor是不是继承了Promsie。

是为了处理当其他对象通过call、apply引用Promise的then方法的情况?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题