我想在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
函数。