修改TS或JS中的类方法定义



我有一个类的结构类似于

class A {
constructor() {}
myMethod() {
console.log('in my method');
}
}

我想制作一个接受classNamemethodName的方法,如:

modifyClassMethod(className, methodName)

此方法应在运行时将指定的methodName的整个主体封装到回调中。

如果我这样做,

modifyClassMethod(A, myMethod)

现在在运行时,myMethod ofA类的主体应该改为

myMethod() {
nr.recordMe('here', {
console.log('in my method').
})
} 

现在,当我将创建A类的新对象时,我将获得myMethod的修改值。

如何在TS或JS中实现这一点?。

您可以获得Decorator Design Pattern的帮助。它也被称为包装器。在打字中,你可以做到;

interface IClassInterface{
myMethod():void
}
class classA implements IClassInterface{
constructor() {}
myMethod() {
console.log('in my method');
}
}
class AWrapper implements IClassInterface{
constructor(private classA:IClassInterface){}
myMethod(somestring?:string) {
//this.classA.myMethod(); either do this, or do sth else
console.log("wrapper works", somestring);
this.classA.myMethod();
}
}

以及在使用时;

let aClass = new classA();
let IClassWrapper =  new AWrapper(aClass);
IClassWrapper.myMethod('here');

最新更新