我想创建一个行为与另一个类完全相同的类。但是对象必须已经实例化,所以我不能使用遗产:
class Welcomer {
sayHello () {
console.log('Hello World')
}
}
class Foo {
private welcomer;
constructor (welcomer: Welcomer) {
this.welcomer = welcomer;
}
sayHello () {
this.welcomer.sayHello();
}
}
基本上,我希望我的Foo
类具有Welcomer
类的所有方法。并且Foo
类上的方法应该只调用Welcomer
类上的方法。
如何在不重写Foo
类中的所有方法的情况下做到这一点?
您可以使用ES2015 中的Proxy
类来拦截 get/set 调用并包装函数并调用代理实现:
class Welcomer {
sayHello() {
console.log('Hello World')
}
}
var welcomer = new Welcomer();
var proxy = new Proxy(welcomer, {
get(target, prop) {
var value = target[prop as keyof Welcomer];
if(typeof value === 'function'){
return function() {
console.log(`Calling ${prop.toString()}`);
value.apply(target, arguments);
}
}
return value;
}
})
proxy.sayHello()
proxy.foo() // error
游乐场链接