覆盖Promise构造函数及其方法

时间:2017-05-23 21:06:55

标签: javascript promise override prototype monkeypatching

我想在Promise中覆盖Promise构造函数和then方法。 因此,每当有人创建一个新的Promise对象时,首先我的代码将被执行,然后原始的promise构造函数将被调用。

同样,当有人调用.then函数时,首先我的代码将被执行,然后then函数的回调将被执行。

我试过这个

var bind = Function.bind;
var unbind = bind.bind(bind);

function instantiate(constructor, args) {
    return new (unbind(constructor, null).apply(null, args));
}

var oldProto = Promise.prototype;
Promise = function() {
    console.log("Promise instantiated");
    var promise = instantiate(Promise, arguments);
    return promise;
};
Promise.prototype = oldProto;

使用

调用此功能
var myFirstPromise = new Promise((resolve, reject) => {
  setTimeout(function(){
    resolve("Success!"); // Yay! Everything went well!
  }, 250);
});

myFirstPromise.then((successMessage) => {
  console.log("Yay! " + successMessage);
});

导致无限循环,控制台填满Promise instantiated日志。我也尝试了以下内容:

Promise = function(Promise) {
    MyPromise.prototype = Promise.prototype;

    function MyPromise(){
        console.log("Hello");
        var promise = Function.prototype.bind.apply(MyPromise, arguments);
        console.log(promise);
        return promise;
    }
}(Promise);

但是,我不确定构造函数覆盖是否是正确的方法,以及如何为Promise定义then函数。

0 个答案:

没有答案