function handleError(target, key, desc) { const { value } = desc; desc.value = async function (...args) { let res; try{ res = await value.apply(this, args); }catch(err){ // 异常处理 logger.error(err) } return res; } return desc; } class Test{ @handleError getData(url){ // fetch 代码 } } let t = new Test() t.getData()
通过以上两个示例我们可以看到,修饰器的定义很简单,功能却非常强大。
小结
我们一步一步通过高阶函数、原型链、Object.defineProperty和@Decorator分别实现了装饰者模式。接下来在回顾一下:
装饰者模式非常适合给业务代码附加非业务相关功能(如日志上报),就如同给照片加滤镜;
装饰者模式非常适合无痛扩展别人的代码(你经常需要接手别人的项目吧)
有些朋友可能会觉得装饰者模式和 vue 的 mixin 机制很像,其实他们都是“开放-封闭原则”和“单一职责原则”的体现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
您可能感兴趣的文章: