我试图创建一个类装饰器,只是简单地向一个类添加一个函数(或属性),但没有快乐。
const findDecorator = () => {
return (constructor) => {
constructor.prototype.findMe = () => console.log('You found me!')
}
}
我还试过使用target.prototype
模式和其他一些东西,但没有用。有没有人有一个如何做到这一点的简单例子?顺便说一句,我也在扩展课程:
@findDecorator()
export default class MyClass extends OtherClass {
shouldFireFirst () {
this.findMe()
}
}
编辑:实际上,看起来问题是该函数在实例上可用,但在类声明中没有。
答案 0 :(得分:0)
基于这些注释,并假设您将Babel与babel-plugin-transform-decorators-legacy
一起使用,您要尝试的是向目标类添加新方法。为此,您需要在装饰器中扩展目标类,如下所示:
const findDecorator = (target) => {
return class extends target {
constructor(...args) {
super();
}
findMe() { console.log('You found me!') }
};
}
@findDecorator
export default class MyClass extends OtherClass {
shouldFireFirst () {
this.findMe()
}
}
new MyClass().shouldFireFirst() // => You found me!
如果您需要将参数传递给装饰器,也可以这样做:
const findDecorator = (name) => (target) => {
return class extends target {
constructor(...args) {
super();
this.name = name
}
findMe() { console.log(`You found ${this.name}!`) }
};
}
@findDecorator('Waldo')
export default class MyClass extends OtherClass {
shouldFireFirst () {
this.findMe()
}
}
new MyClass().shouldFireFirst() // => You found Waldo!