定義:修飾器是一個對類進行處理的函數,用來修改類的行為
<注>:裝飾器只能用來修改類及類的方法
類的裝飾:
- 靜態屬性:只能通過類訪問,修飾函數直接在類上操作
@testable class MyTestableClass { // ... } function testable(target) { target.isTestable = true; } MyTestableClass.isTestable // true
<注>1)testable函數的參數target是MyTestableClass類本身。
2)修飾器也可以接受參數:這就等於可以修改修飾器的行為
function testable(isTestable) { return function(target) { target.isTestable = isTestable; } } @testable(true) class MyTestableClass {} MyTestableClass.isTestable // true @testable(false) class MyClass {} MyClass.isTestable // false
- 實例屬性:可以在實例中訪問,對類的prototype對象進行操作
function testable(target) { target.prototype.isTestable = true; } @testable class MyTestableClass {} let obj = new MyTestableClass(); obj.isTestable // true
類方法的修飾
class Person { @readonly name() { return `${this.first} ${this.last}` } } function readonly(target, name, descriptor){ // descriptor對象原來的值如下 // { // value: specifiedFunction, // enumerable: false, // configurable: true, // writable: true // }; descriptor.writable = false; return descriptor; }
<注>:修飾器第一個參數是類的原型對象,第二個參數是所要修飾的屬性名,第三個參數是該屬性的描述對象。
