Rumah >hujung hadapan web >tutorial js >Bagaimanakah `new.target` membantu kami memahami warisan dalam kelas ES6?
Istilah "new.target" muncul jarang dalam spesifikasi ECMAScript 2015 (14.2.3 dan 14.2.16), menimbulkan persoalan tentang tujuannya. Menariknya, nama penuhnya ialah NewTarget, ditemui dalam §12.3.8.
NewTarget ialah sifat meta yang mendapatkan semula nilai semasa [[NewTarget]] dalam semasa persekitaran fungsi bukan anak panah. Apabila fungsi dipanggil, nilai [[NewTarget]] diberikan, serupa dengan pengikatan ini.
Sebelum ini, mengesan jika fungsi dipanggil sebagai pembina bukanlah disokong secara jelas. Walau bagaimanapun, NewTarget menyelesaikannya dengan mendedahkan sama ada kaedah dalaman [[Construct]] mencipta Rekod Persekitaran. Menurut §8.1.1.3, jika Rekod Persekitaran dicipta oleh [[Construct]], [[NewTarget]] memegang nilai parameter newTarget [[Construct]]. Jika tidak, ia kekal tidak ditentukan.
Sementara gula sintaksis, kelas ES6 menawarkan warisan sebenar. Di sinilah NewTarget memainkan peranan penting. Apabila memanggil pembina kelas menggunakan X baharu, nilai ini pada mulanya tidak ditetapkan. Panggilan super() dalam pembina mencipta objek tetapi mewarisi daripada .prototaip pembina asalnya dipanggil.
NewTarget menangkap pembina paling luar yang menerima panggilan baharu. Ia bukan pembina yang sedang melaksanakan. Nilai ini ialah apa yang akan dihantar ke dalam prosedur OrdinaryCreateFromConstructor, memastikan tika itu mewarisi dengan betul daripada prototaip yang dikehendaki.
Untuk menggambarkan, pertimbangkan kelas berikut:
<code class="javascript">class Parent { constructor() { // implicit (from the `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 uninitialised (and would throw if accessed) // implicit (from the `new` call): // new.target = Child super(); // this = Reflect.construct(Parent, [], new.target); console.log(this); } } new Child;</code>
Dalam contoh ini, NewTarget membenarkan kelas Induk mengenali bahawa ia dipanggil sebagai pembina melalui kelas Anak. Kelas Kanak-kanak kemudian menggunakan maklumat ini semasa panggilan super() untuk mewujudkan warisan dengan betul.
Atas ialah kandungan terperinci Bagaimanakah `new.target` membantu kami memahami warisan dalam kelas ES6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!