Rumah >hujung hadapan web >tutorial js >Bolehkah Pembina Mengembalikan Nilai Selain daripada 'ini'?

Bolehkah Pembina Mengembalikan Nilai Selain daripada 'ini'?

Linda Hamilton
Linda Hamiltonasal
2024-11-14 13:01:02623semak imbas

Can Constructors Return Values Other Than

Pulangan Nilai untuk Pembina Yang Melangkau Rujukan "ini"

Apabila memanggil pembina menggunakan kata kunci baharu, tingkah laku lalai adalah untuk pembina untuk mengembalikan objek yang baru dibuat (dirujuk sebagai "ini"). Walau bagaimanapun, terdapat keadaan tertentu di mana pembina boleh mengembalikan nilai yang berbeza, dengan berkesan menghalang penetapan "ini" kepada objek yang baru dibuat.

Menurut spesifikasi ECMAScript, langkah 8 [[Construct]] harta dalaman mentakrifkan tingkah laku pulangan seperti berikut:

Jika jenis nilai yang dikembalikan oleh fungsi pembina (Result(6)) bukan Objek:

- The value returned by the constructor will be returned instead of "`this`".

Oleh itu, untuk mengembalikan nilai selain daripada "ini" daripada pembina:

  1. Kembalikan primitif bukan objek (seperti rentetan, nombor atau boolean): Jika nilai yang dikembalikan ialah primitif, ia tidak akan ditafsirkan sebagai objek, dan oleh itu objek baharu tidak akan dikembalikan.
  2. Kembalikan objek tersuai atau nilai bukan nol dengan jenis selain daripada Objek: Ini boleh dicapai menggunakan kaedah Object.create() atau dengan memberikan prototaip berbeza kepada objek yang dicipta.

Contoh:

function Foo() {
    return { name: "sample" };
}

var foo = new Foo();
console.log(foo instanceof Foo); // false

Dalam kes ini, sejak Foo constructor mengembalikan objek yang bukan instance Foo constructor, (new Foo() instanceof Foo) akan menilai kepada false.

Atas ialah kandungan terperinci Bolehkah Pembina Mengembalikan Nilai Selain daripada 'ini'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn