Monkey-Patch Promise构造函数



作为一个练习,我尝试了猴子绘制承诺构造函数,就像这样:

const pconstructor = global.Promise;
global.Promise = function (fn1) {
  this.foo = 'bar';
  pconstructor.call(this,fn1);
};
global.Promise.resolve = pconstructor.resolve;

但是,我打电话时会出现错误

Promise.resolve();

=>

TypeError: [object Object] is not a promise

任何人都知道如何正确地勾勒构造函数?

我建议只写一个Promise的子类:

const global = window; // (in browser...)
const OldPromise = global.Promise; 
global.Promise = class Promise extends OldPromise {
  constructor(executor) {
    // do whatever you want here, but must call super()
    console.log('hello, promise');
    super(executor); // call native Promise constructor
  }
};
Promise.resolve(); // prints: "hello, promise"

这会在试图猴子绘制这样的班级时照顾幕后的所有细节。

最新更新