装饰器是最新的 ECMA 中的一个提案,是一种与类(class)相关的语法,用来注释或修改类和类方法。装饰器在 Python 和 Java 等语言中也被大量使用。装饰器是实现 AOP(面向切面)编程的一种重要方式。
在开始讲解装饰器之前,先从经典的装饰器模式说起。装饰器模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构,是作为对现有类的一个包装。
一般来说,在代码设计中,我们应当遵循「多用组合,少用继承」的原则。通过装饰器模式动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。
类装饰器
const decoratorClass = (targetClass) => {targetClass.test = '123'}@decoratorClassclass Test {}Test.test; // '123'
const withSpeak = (targetClass) => {const prototype = targetClass.prototype;prototype.speak = function() {console.log('I can speak ', this.language);}}@withSpeakclass Student {constructor(language) {this.language = language;}}const student1 = new Student('Chinese');const student2 = new Student('English');student1.speak(); // I can speak Chinesestudent2.speak(); // I can speak Chinese
Ps: 封装的一个函数, 以修饰目标为参数, 也可以接受其他参数. 可以对目标做无侵入修改
