如何创建"proxy"对象的类?



我想创建一个行为与另一个类完全相同的类。但是对象必须已经实例化,所以我不能使用遗产:

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

游乐场链接

最新更新