我实际上是在 Typescript 中处理这个问题,但我会用 Javascript 写这个问题。任何一个的答案都很好。
我有两个本质上具有相同接口(interface)的对象。我想创建一个具有相同接口(interface)的第三个对象,每个函数只调用 contains 中两个对象的方法。有没有办法以编程方式创建所有函数,这样我就不必将它们全部键入?
c = console.log; // shorthand
obj1 = function() {}
obj1.prototype = {
foo: (x) => { c("1" + x) },
bar: (x, y) => { c("1" + x + y) }
}
obj2 = function() {}
obj2.prototype = {
foo: (x) => { c("2" + x) },
bar: (x, y) => { c("2" + x + y) }
}
obj3 = function() {
this.o1 = new obj1()
this.o2 = new obj2()
}
obj3.prototype = {
foo: function(x) {
this.o1.foo(x);
this.o2.foo(x);
},
bar: function(x, y) {
this.o1.bar(x, y);
this.o2.bar(x, y);
}
}
我正在寻找一种无需手动写出每个成员函数即可编写 obj3 的方法,因为我有很多成员函数。
最佳答案
您可以使用 Proxy
对象:
function multiproxy(objects) {
return new Proxy(objects[0], {
get: function(target, name) {
var that = this;
return function() {
var result;
for (let obj of objects) {
result = obj[name].apply(that, arguments);
}
return result;
};
}
});
}
所以在你的情况下,你会这样做:
var instance3 = multiproxy([new obj1(), new obj2()]);
现在,instance3
的行为类似于 obj1
,但在 obj2
上调用相同的方法。
这不会处理对象的非函数属性,但添加起来并不难。
关于javascript - 我可以在 Javascript/Typescript 的函数中以编程方式调用另一个具有相同名称的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928154/