> 웹 프론트엔드 > JS 튜토리얼 > \'new.target\' 메타 속성은 어떻게 ES6 클래스 상속을 용이하게 합니까?

\'new.target\' 메타 속성은 어떻게 ES6 클래스 상속을 용이하게 합니까?

Patricia Arquette
풀어 주다: 2024-11-06 04:37:02
원래의
603명이 탐색했습니다.

How does the

"new.target" 이해

ECMAScript 2015 사양에는 "new.target"이라는 메타 속성이 도입되었습니다. 함수가 호출되었는지 여부를 확인하는 화살표가 아닌 함수 constructor.

정의 및 목적

"new.target"은 첫 번째 메타 속성을 나타내며 사양의 §12.3.8에 공식적으로 정의되어 있습니다. 유일한 목적은 함수의 "[[NewTarget]]" 내부 값의 현재 값을 검색하는 것입니다. 이 값은 "this" 바인딩과 유사하게 함수가 호출될 때 설정됩니다.

§8.1.1.3 함수 환경 레코드에 따르면 "[[NewTarget]]" 값은 "[[ Construct]]" 함수가 생성자로 호출되는 경우 newTarget 매개변수입니다. 그렇지 않으면 해당 값은 정의되지 않은 상태로 유지됩니다.

ES6 클래스의 중요성

"new.target"은 ES6 클래스 구현에서 중요한 역할을 하며, 내장 객체. "new"를 사용하여 클래스 생성자를 호출할 때 "this" 값은 아직 초기화되지 않습니다. 그러나 super() 메소드가 호출되면 객체가 생성되고 "newTarget" 생성자의 ".prototype"을 상속하도록 설정됩니다.

다음 예에서는 클래스 상속에서 "new.target"이 어떻게 사용되는지 보여줍니다.

class Parent {
  constructor() {
    // Implicit from super() call: new.target = Child
    // Implicit because Parent doesn't extend anything:
    // this = Object.create(new.target.prototype)
    console.log(new.target) // Child!
  }
}

class Child extends Parent {
  constructor() {
    // this is uninitialized (and would throw if accessed)
    // Implicit from new call: new.target = Child
    super() // this = Reflect.construct(Parent, [], new.target)
    console.log(this)
  }
}

new Child
로그인 후 복사

여기서 예:

  • Parent 생성자는 "new.target"을 사용하여 Child 생성자에 액세스합니다.
  • Child 생성자는 "new.target"을 사용하여 "new.target"을 사용하여 호출되었는지 확인합니다. ," "this" 값이 초기화되기 전에 super() 호출이 수행된 경우에도 마찬가지입니다.
  • 이를 통해 Child 생성자가 Parent로부터 올바르게 상속받을 수 있습니다. 프로토타입.

위 내용은 \'new.target\' 메타 속성은 어떻게 ES6 클래스 상속을 용이하게 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿