修饰器-类的修饰
修饰器函数可以接受三个参数,依次是目标函数、属性名和该属性的描述对象。后两个参数可省略。上节修饰器-类的修饰1代码中,testable函数的参数target,就是所要修饰的对象。如果希望修饰器的行为,能够根据目标对象的不同而不同,就要在外面再封装一层函数。
function testable(isTestable) {
return function(target) {
target.isTestable = isTestable;
}
}
@testable(true) class MyTestableClass () {}
document.write(MyTestableClass.isTestable) // true
@testable(false) class MyClass () {}
document.write(MyClass.isTestable) // false
如果想要为类的实例添加方法,可以在修饰器函数中,为目标类的prototype属性添加方法。
function testable(target) {
target.prototype.isTestable = true;
}
@testable
class MyTestableClass () {}
let obj = new MyClass();
document.write(obj.isTestable) // true