데코레이터가 클래스 동작에 대해 변경한 사항은 런타임이 아닌 코드가 컴파일될 때 발생합니다. 이는 데코레이터가 컴파일 중에 코드를 실행할 수 있음을 의미합니다. 즉, 데코레이터는 본질적으로 컴파일 타임에 실행되는 함수입니다.
다음과 같은 질문이 있습니다:
위 인용문은 다음과 같습니다. 修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时
,这句中的编译时
、运行时
、发生
무슨 뜻인가요?
修饰器本质就是编译时执行的函数
,这里的执行
和问题一中的发生
같은 뜻인가요?
수식어는 일반적으로 어디에 사용되나요?
책에 설명이 좀 애매한데 자세히 설명해주실 수 있나요?
컴파일 시간은 코드가 실행되기 전에 JS 엔진이 코드를 기계가 실행할 수 있는 작업으로 변환하는 시간으로 대략적으로 이해할 수 있습니다. 즉, 이 프로세스는 실행이 시작되기 전에 완료되므로 런타임에 방해받을 수 없습니다.
런타임은 코드가 컴파일된 후 기계가 실행할 수 있는 작업이 실행되기 시작하는 때, 즉 당신이 작성한 내용이 기계 작업에서 실제로 컴퓨터에서 볼 수 있는 것으로 변경되는 때를 말합니다.
발생에는 특별한 의미가 없으며 JS 엔진이 코드를 기계 작업으로 변환하면 이러한 변경이 완료된다는 의미입니다.
실행과 발생은 대략적으로 원인과 결과의 관계라고 볼 수 있습니다. 변화, 동사의 일반적인 배열은 "일어난다", 기능, 단어의 일반적인 배열은 "실행"입니다. 발생은 이전 상태와 이후 상태의 대비, 즉 어떤 일이 발생했기 때문에 이후가 이전과 다르다는 것을 강조합니다. 반면에 실행은 프로세스에 중점을 둡니다. 작업을 수행한다는 것은 작업 전후에 차이가 있는지 의도적으로 주의를 기울이지 않고 작업의 모든 단계를 다시 수행하는 것입니다. 따라서 여기에 수정자 = 컴파일 타임에 실행되는 함수가 있어야 합니다. 이 함수를 실행하면 클래스 동작이 변경됩니다.
위에서 언급했듯이 클래스 동작에 대한 변경 사항이므로 수정자는 일반적으로 클래스가 선언될 때 클래스의 메서드와 속성을 수정하는 데 사용됩니다.
직접 말하면 코드는 일반적으로 컴파일 단계와 실행 단계로 구분됩니다. 컴파일 단계에서는 코드를 트리로 파싱하고, 실행 단계에서는 트리에 따라 실행된다는 것을 알 수 있습니다. 컴파일로 구성되었습니다. github에서 core- decorators.js를 검색할 수 있습니다. 이 라이브러리는 데코레이터의 예입니다.