「new.target」について
ECMAScript 2015 仕様では、「new.target」として知られるメタ プロパティが導入されています。関数がコンストラクターとして呼び出されたかどうかを判断するための非アロー関数。
定義と目的
「new.target」は最初のメタ プロパティを指し、正式には仕様の§12.3.8 で定義されています。その唯一の目的は、関数の内部値「[[NewTarget]]」の現在の値を取得することです。この値は、「this」バインディングと同様に、関数が呼び出されるときに設定されます。
§8.1.1.3 関数環境レコードによると、「[[NewTarget]]」値は「[[ Construct]]" 関数がコンストラクターとして呼び出される場合の newTarget パラメーター。それ以外の場合、値は未定義のままです。
ES6 クラスの重要性
「new.target」は、ES6 クラスの実装において重要な役割を果たし、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
この例では:
以上が「new.target」メタ プロパティは ES6 クラスの継承をどのように促進しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。