我有一个对象,其中每个键的值都是构造函数。
const obj = {
a : [Function: aConstructor],
b : [Function: bConstructor],
}
我想创建另一个对象obj2
,它将向其他服务公开,并根据提供给obj2
的输入,它将使用修改的参数调用相应的obj1
构造函数。 / p>
_.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
中的构造函数,并使用修改后的输入参数再次调用它。
如果问题不够明确,请告诉我?
答案 0 :(得分:0)
你快到了。
我做了什么:
obj[key]
而不是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>