为什么抽象 class returns 中的修饰静态方法未定义
why does a decorated static method in an abstract class returns undefined
我有一个装饰器,我在不同服务的某些方法中使用了它,它按预期工作。
我创建了一个具有静态方法的抽象 class,并使用与上述相同的装饰器对其进行了装饰。
export function MyDecorator(): MethodDecorator {
return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
const original = descriptor.value;
descriptor.value = function (...args) {
if (args[0].message)
args[0] = { ...args[0], message: parse(args[0].message) };
original.call(this, ...args);
};
};
}
export abstract class MyAbstractClass {
@myDecorator()
static decoratedMethod(param) {
return 'Yeah Baby!';
}
}
然后我像这样在我的组件中调用这个方法...
const result = MyAbstractClass.decoratedMetod('meh');
它 returns undefined
。一旦我在摘要 class 中注释掉装饰器,它就会 returns 字符串 'Yeah baby!' 按预期进行。
我在这里错过了什么?
你做对了但是你忘了return调用原始值:
descriptor.value = function (...args) {
if (args[0].message)
args[0] = { ...args[0], message: parse(args[0].message) };
// only called, value is not used
original.call(this, ...args);
};
您可以通过再添加 7 个字符来解决这个问题:
return original.call(this, ...args);
^^^^^^^
我有一个装饰器,我在不同服务的某些方法中使用了它,它按预期工作。
我创建了一个具有静态方法的抽象 class,并使用与上述相同的装饰器对其进行了装饰。
export function MyDecorator(): MethodDecorator {
return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
const original = descriptor.value;
descriptor.value = function (...args) {
if (args[0].message)
args[0] = { ...args[0], message: parse(args[0].message) };
original.call(this, ...args);
};
};
}
export abstract class MyAbstractClass {
@myDecorator()
static decoratedMethod(param) {
return 'Yeah Baby!';
}
}
然后我像这样在我的组件中调用这个方法...
const result = MyAbstractClass.decoratedMetod('meh');
它 returns undefined
。一旦我在摘要 class 中注释掉装饰器,它就会 returns 字符串 'Yeah baby!' 按预期进行。
我在这里错过了什么?
你做对了但是你忘了return调用原始值:
descriptor.value = function (...args) {
if (args[0].message)
args[0] = { ...args[0], message: parse(args[0].message) };
// only called, value is not used
original.call(this, ...args);
};
您可以通过再添加 7 个字符来解决这个问题:
return original.call(this, ...args);
^^^^^^^