es7 decorator使用注释方式的装饰器在被import时就会开始装饰,如果需要延迟装饰有好的办法吗?

在做一个库的开发,希望用到装饰器,但装饰器不能立刻装饰。需要等待库初始化实例后再装饰,因为需要给target的某个属性绑定一个库实例中维护的唯一的对象。装饰器的使用如果放到一个js中,当被引入时,装饰器就会立刻执行,这样会先于库实力执行,这样就不行。
有什么好的办法延迟执行吗?

我能想到的3个方式,都不是太好
1.装饰器的使用放到函数里,这样引入这个js时只会立刻执行函数的定义,不会进行装饰,需要调用函数才行。但代码就和丑陋了,本来要定义一个类,装饰一些功能,但现在要先定义一个函数,函数里再定义这个类,同时装饰。
2.装饰器里延迟执行装饰,比如先把装饰逻辑函数放到一个任务列表里。然后提供一个api。页面加载后,装饰器先执行,随后将装饰逻辑回调放入任务列表。当业务侧主动调用这个api时,才执行这些任务进行真正的装饰。这样太繁琐.
3.dynamic-import,我做的是npm库的开发,不太适合这种方式

有什么更好的方式吗?让这样的js在被import后不会立刻装饰,而是在某个时机,再装饰。

// Dog.js
@inhancer
export class Dog {}
阅读 721
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏