Javascript 何时执行typescript/js装饰程序
装饰师什么时候被处决Javascript 何时执行typescript/js装饰程序,javascript,typescript,decorator,Javascript,Typescript,Decorator,装饰师什么时候被处决 class Person { @SomeDecorator age } 当我创建Person的实例时 当分析Person类时 静态属性呢?属性装饰器在定义类时提前执行。您不需要构造实例或访问属性 示例:此日志记录了age,甚至没有构建Person类。如果属性是静态的,则同样适用 function SomeDecorator(a, b) { console.log(b); } class Person { @SomeDecorator
class Person {
@SomeDecorator
age
}
静态属性呢?属性装饰器在定义类时提前执行。您不需要构造实例或访问属性 示例:此日志记录了
age
,甚至没有构建Person
类。如果属性是静态的,则同样适用
function SomeDecorator(a, b) {
console.log(b);
}
class Person {
@SomeDecorator
public age: number;
}
如果您是在钩住属性上的get和set操作之后-这也是可能的。下面是中的一个列表示例。它通过包装getter和setter来工作
function log(target: any, key: string) {
let value = target[key];
// Replacement getter
const getter = function () {
console.log(`Getter for ${key} returned ${value}`);
return value;
};
// Replacement setter
const setter = function (newVal) {
console.log(`Set ${key} to ${newVal}`);
value = newVal;
};
// Replace the property
if (delete this[key]) {
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true
});
}
}
class Calculator {
@log
public num: number;
square() {
return this.num * this.num;
}
}
console.log('Construct');
const calc = new Calculator();
console.log('Set');
// Set num to 4
calc.num = 4;
console.log('Get');
// Getter for num returned 4
// Getter for num returned 4
calc.square();
此列表的输出为:
Construct (manual log)
Set (manual log)
-> Set num to 4
Get (manual log)
-> Getter for num returned 4
-> Getter for num returned 4
什么是静态类?@Bergi Sry,我指的是静态属性上的装饰器