1 類裝飾器
普通類裝飾器
類裝飾器傳參
編譯源碼:=> 更好理解裝飾器寫法
裝飾器封裝
var __decorate = function (decorators, target, key, desc) {
...
return Object.defineProperty(target, key, r)
//這里對應(object,propertype,propertypeDeclaration)
};
//Object.defineProperty()的作用就是直接在一個對象上定義一個新屬性,或者修改一個已經存在的屬性
function changeClass2(param) {
return function (target) {
target.prototype.title = param;
target.prototype.add = function () {
console.log('add');
};
};
}
var DemoClass2 = /** @class */ (function () {
function DemoClass2() {
}
DemoClass2 = __decorate([ //裝飾器名字,目標類
changeClass2('hello') //傳入hello參數
], DemoClass2);
return DemoClass2;//返回目標類
}());
修改構造函數的類裝飾器
2 屬性裝飾器
注意:這里的target是指實例對象,而類裝飾器指向的是類本身
3 方法裝飾器
方法參數裝飾器
4 裝飾器執行順序
裝飾器可以同時使用多個因此需要知道其執行順序
不同類型裝飾器執行順序:屬性>方法>方法參數>類
在多個同類型的裝飾器中的執行順序 => 從后向前執行