我有一个类的结构类似于:
class A {
constructor() {}
myMethod() {
console.log('in my method');
}
}
我想制作一个接受className
和methodName
的方法,如:
modifyClassMethod(className, methodName)
此方法应在运行时将指定的methodName
的整个主体封装到回调中。
如果我这样做,
modifyClassMethod(A, myMethod)
现在在运行时,myMethod of
A类的主体应该改为
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');