给出两个类:
function Example(){
this.methodOne = function(/* some args */){...};
this.methodTwo = function(/* some args */){...};
this.methodThree = function(/* some args*/){...};
}
function ExampleWrapper(example){
this.functionFour = function(...){...};
this.wrapped = example;
}
其中ExampleWrapper获取Example的实例并将其包装以获得更多功能(装饰器模式)。
我希望能够从ExampleWrapper的实例调用Example的每个函数,而无需手动定义每个函数。 我的意思是,对于Example中的每个函数,我可以在ExampleWrapper
中执行以下操作function ExampleWrapper(example){
...
this.methodOne = function(/* some args */){
return this.wrapped.methodOne(/* same some args*/);
}
...
}
然后
var ex = new Example();
var wrap = new ExampleWrapper(ex);
wrap.methodOne(...)
但这不是很容易升级/整洁。
那么,我怎么能做到这一点? [猜测反思可能是要走的路,但我还不习惯使用它]
答案 0 :(得分:0)
您是否尝试扩展原型?
function Example(){
}
Example.prototype.methodOne = function(/* some args */){console.log('1')};
Example.prototype.methodTwo = function(/* some args */){console.log('2')};
Example.prototype.methodThree = function(/* some args*/){console.log('3')};
function ExampleWrapper(example){
this.functionFour = function(...){...};
this.wrapped = example;
}
ExampleWrapper.prototype = Example.prototype;
var test = new ExampleWrapper(new Example());
test.functionFour();
test.methodOne(...);