2
デコレータはいつ実行されますか?typescript/jsデコレータが実行されるタイミング
class Person {
@SomeDecorator
age
}
- Personクラスは、静的プロパティに関する
何をして解析されたとき、私は人
デコレータはいつ実行されますか?typescript/jsデコレータが実行されるタイミング
class Person {
@SomeDecorator
age
}
何をして解析されたとき、私は人
プロパティデコレータは、クラスが定義されているときに早期に実行されます。インスタンスを構築したり、プロパティにアクセスする必要はありません。
例:これはPerson
クラスが構築されていなくてもage
を記録します。プロパティが静的である場合も同様です。
function SomeDecorator(a, b) {
console.log(b);
}
class Person {
@SomeDecorator
public age: number;
}
プロパティのgetおよびsetアクションにフックインしている場合は、それも可能です。以下はPro TypeScript (Second Edition)のリストの例です。これは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
@Bergi Sry、静的なプロパティのデコレータ – Chris