簡體   English   中英

通過創建新的構造函數來攔截構造函數

[英]Intercept a constructor by creating a new constructor

我有一個對象,其中每個鍵的值都是一個構造函數。

const obj = {
    a : [Function: aConstructor],
    b : [Function: bConstructor],
} 

我想創建另一個對象obj2 ,該對象將公開給其他服務,並基於提供給obj2的輸入,它將使用修改后的參數調用相應的obj1構造函數。

_.each(obj, (value, key) => {
    obj2[key] = function A(message) {
         if(message===null)
            message = "MY CUSTOM MESSAGE";
         value(message)
    }
});

用例:

const a = new obj2.a(null) 
//this should call the obj.a constructor with message "MY CUSTOM MESSAGE"

所以我只想在obj攔截構造函數,然后使用修改后的輸入參數再次調用它。 請讓我知道問題是否還不夠清楚嗎?

你快到了

我做了什么 :

  • obj[key]而不是obj.value找到所選的構造obj.value
  • 使用Function.prototype.call調用所選的構造函數,並將this引用傳遞給我要創建的實例

 const obj = { a : function (message) { console.log("constructor a, message : " + message); this.message = message; }, b : function (message) { console.log("constructor b, message : " + message); this.message = message; }, } var obj2 = {}; _.each(obj, (value, key) => { obj2[key] = function A(message) { if(message===null) { message = "MY CUSTOM MESSAGE"; } obj[key].call(this, message); } }); const a = new obj2.a(null); console.log("a = ", a); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.0/underscore-min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM