skj*_*l93 5 javascript overriding prototype monkeypatching promise
我想覆盖Promise构造函数和Promise中的then方法。因此,每当有人创建一个新的Promise对象时,首先将执行我的代码,然后将调用原始的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;
Run Code Online (Sandbox Code Playgroud)
当使用
var myFirstPromise = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!"); // Yay! Everything went well!
}, 250);
});
myFirstPromise.then((successMessage) => {
console.log("Yay! " + successMessage);
});
Run Code Online (Sandbox Code Playgroud)
它导致无限循环,控制台充满了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);
Run Code Online (Sandbox Code Playgroud)
但是,我不确定构造函数是否被重写是正确的方法以及如何then为Promise 定义函数。
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |