decoratorの評価順
code:ts
/**
* decoratorsの定義
*/
function paramerter1(target: any, props: string, index: number) {}
function method1(target: any, props: string, descriptor: PropertyDescriptor) {}
function accessor1() {
return function (
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {};
}
function property1(target: any, props: string) {}
function class1(constructor: Function) {}
/**
* 付与
*/
@class1
class Hoge {
@property1
private _x: string;
constructor(@paramerter1 x: string) {
this._x = x;
}
@accessor1()
get x() {
return this._x;
}
@method1
greet() {
return 'Hello, ' + this._x;
}
}
/**
* 実行
*/
const h = new Hoge('a');
h.greet();
途中で書くのだるくなったmrsekut.icon
こう書いた時、
code:ts
function f() {
console.log("f(): evaluated");
return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("f(): called");
}
}
function g() {
console.log("g(): evaluated");
return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("g(): called");
}
}
class C {
@f()
@g()
method() {}
}
出力はこう
code:_
f(): evaluated
g(): evaluated
g(): called
f(): called
評価部分は上から順にだが、実際のdecoratorの実行は、下から実行される
これは1行で書くこともできる
@f() @g() x
これは、f(g(x))とみなすと、gが先に実行されることのイメージができる
そんな事言われてもなmrsekut.icon
インスタンスメンバーへ適用
Staticメンバーへ適用
constructor
class
code:ts
@deco
class C {..}