在做一个库的开发,希望用到装饰器,但装饰器不能立刻装饰。需要等待库初始化实例后再装饰,因为需要给target的某个属性绑定一个库实例中维护的唯一的对象。装饰器的使用如果放到一个js中,当被引入时,装饰器就会立刻执行,这样会先于库实力执行,这样就不行。
有什么好的办法延迟执行吗?
我能想到的3个方式,都不是太好
1.装饰器的使用放到函数里,这样引入这个js时只会立刻执行函数的定义,不会进行装饰,需要调用函数才行。但代码就和丑陋了,本来要定义一个类,装饰一些功能,但现在要先定义一个函数,函数里再定义这个类,同时装饰。
2.装饰器里延迟执行装饰,比如先把装饰逻辑函数放到一个任务列表里。然后提供一个api。页面加载后,装饰器先执行,随后将装饰逻辑回调放入任务列表。当业务侧主动调用这个api时,才执行这些任务进行真正的装饰。这样太繁琐.
3.dynamic-import,我做的是npm库的开发,不太适合这种方式
有什么更好的方式吗?让这样的js在被import后不会立刻装饰,而是在某个时机,再装饰。
// Dog.js
@inhancer
export class Dog {}