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
}
  • 当我创建Person的实例时
  • 当分析Person类时

  • 静态属性呢?

    属性装饰器在定义类时提前执行。您不需要构造实例或访问属性

    示例:此日志记录了
    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,我指的是静态属性上的装饰器