2017-04-20 110 views
1

只是作爲一個練習,我嘗試猴子修補無極構造,像這樣:猴補丁無極構造

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 

任何人都知道如何猴子修補這樣的構造函數,正確嗎?

回答

1

我建議你只是寫的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"

試圖當這發生在幕後的所有細枝末節照顧猴子打補丁就像一個類那。

+0

感謝這與香草JS/ES6的作品!但是當使用TypeScript來傳輸時,我得到一個錯誤:) https://github.com/Microsoft/TypeScript/issues/15294 –