Bolehkah Pembina Mengembalikan Nilai Selain daripada 'ini'?

Linda Hamilton
Lepaskan: 2024-11-14 13:01:02
asal
556 orang telah melayarinya

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`".
Salin selepas log masuk

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

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

Contoh:

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

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

Dalam kes ini, memandangkan pembina Foo mengembalikan objek yang bukan contoh pembina Foo, (contoh Foo() baharu bagi Foo ) akan menilai kepada palsu.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan