2017-11-28 2 views
2

언제 데코레이터가 실행됩니까?typescript/js 데코레이터가 실행되는시기

class Person { 
    @SomeDecorator 
    age 
} 
  1. 나는 Person 클래스는

무엇 정적 속성에 대한 구문 분석됩니다

  • 사람
  • 의 인스턴스를 만들 때?

    +0

    정적 클래스는 무엇입니까? – Bergi

    +0

    @Bergi Sry, 정적 속성의 장식자를 의미했습니다. – Chris

    답변

    1

    속성 데코레이터는 클래스가 정의 될 때 초기에 실행됩니다. 인스턴스를 구성하거나 속성에 액세스 할 필요가 없습니다.

    예 : 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 
    
    관련 문제