[英]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.