デコレータは何ですか
デコレータは、実際にクラスとクラスメソッドを変更するための一般的な機能です。
例えば:
@test
class DecoratorTest {
}
function test(target) {
target.testable = true;
}
ターゲット引数は、それがクラス修飾することである
テスト可能な静的プロパティを追加DecoratorTestするクラスを表す、と等価です。
class DecoratorTest {
public static testable = true;
}
あなたは、パラメータが足りないと感じた場合は、その後、アウト渡すために使用される関数パラメータの層を設定することができ
、このように:
@testParam(true)
class DecoratorTest {
}
function testParam(boolean bool) {
return function test(target) {
target.testable = bool;
}
}
これは、より柔軟になります。
私達はちょうどデコレータクラスはプロトタイプクラスの静的プロパティ、プラス共感インスタンスのプロパティを追加することだがライン上にプロパティを追加するだけで済みます
@testParam(true)
class DecoratorTest {
}
function testParam(boolean bool) {
return function test(target) {
target.prototype.testable = bool;
}
}
:::警告
デコレータクラスの振る舞いの変更ではなく、運用段階よりも、あなたのコードのコンパイル・フェーズで発生
:::
ここで使用することができます
変形例のみクラスを飾ることができない、クラスものプロパティとメソッドに変更することができる
前にあるものにあなたを改良部何、
変更されたクラスの属性およびメソッドときは、デコレータ機能は3つのパラメータを受け入れます
function readonly(target, name, descriptor) {
descriptor.writable = false;
return descriptor;
}
ターゲットは、ターゲットオブジェクトで、名前は、オブジェクトに記述されて変更した属性名、属性記述子である
限り、ディスクリプタ船
{
value : specifiedFunction,
enumerable: false,
configurable: true,
writable: true
}
これは、属性を列挙することができるかどうかを定義し配置するかどうか、読み取り可能な
読み取り専用属性デコレータ上に書き込み不可修飾
類似
Object.defineProperty(target, name, {
value : specifiedFunction,
enumerable: false,
configurable: true,
writable: false
})
これは使用できません。
機能のJS修飾はプリコンパイル段階の存在下で機能JSリフト関数として、修正するために使用することができません
サードパーティのライブラリ
コアdecorators.js
このモジュールは、いくつかの一般的に使用されるデコレータをカプセル化
- @autobindこの方法は、元のオブジェクトを結合します
- @ReadOnlyプロパティとメソッドを書くことはできません
- @Overrideチェックサブクラスのメソッドが正常に同じ名前の親クラスのメソッドをカバー正しくない場合は、エラーになります
- 警告方法は廃止になることを示す、コンソールに表示される@deprecated