Rumah >hujung hadapan web >tutorial js >Mengapakah Pembina Berfungsi Kadangkala Mengembalikan Nilai Bukan Ini?

Mengapakah Pembina Berfungsi Kadangkala Mengembalikan Nilai Bukan Ini?

Susan Sarandon
Susan Sarandonasal
2024-11-11 12:53:021077semak imbas

Why Does a Constructor Function Sometimes Return a Non-this Value?

Kes Ingin Tahu Bukan Pengembalian Ini dalam Fungsi Pembina

Apabila menggunakan fungsi pembina dengan kata kunci baharu, secara amnya diandaikan bahawa fungsi itu akan mengembalikan yang baru dibuat objek. Walau bagaimanapun, dalam keadaan tertentu, nilai bukan ini boleh dikembalikan.

Dalam JavaScript, keadaan tepat yang mengawal tingkah laku ini ditakrifkan dalam sifat dalaman [[Construct]] spesifikasi ECMAScript untuk objek fungsi. Apabila dipanggil, sifat ini melakukan langkah berikut:

  1. Mencipta objek baharu.
  2. Menetapkan sifat [[Kelas]]nya sebagai "Objek".
  3. Mendapatkan semula nilai sifat prototaip daripada fungsi pembina.
    4-5. Menetapkan sifat [[Prototaip]] objek baharu kepada nilai prototaip (jika ia objek) atau objek prototaip Objek asal sebaliknya.
  4. Memanggil sifat [[Panggil]] bagi fungsi pembina, menggunakan objek baharu seperti ini, menghantar hujah pembina sebagai hujahnya.
    7-8. Langkah Penting: Mengembalikan objek baharu jika Type(Result(6)) bukan Objek, atau mengembalikan Result(1) (iaitu, objek baharu yang dibuat dalam langkah 1) sebaliknya.

Oleh itu, nilai yang dikembalikan oleh fungsi pembina akan menentukan sama ada objek yang baru dibuat dikembalikan atau bukan:

  • Jika nilai yang dikembalikan ialah bukan objek primitif, objek baharu akan dikembalikan.
  • Jika nilai yang dikembalikan ialah sebarang objek, ini akan dikembalikan.

Untuk menguji sama ada objek yang baru dicipta adalah benar-benar berbeza daripada satu dikembalikan oleh pembina, seseorang boleh menyemak: (New Foo() instanceof Foo) === false.

Atas ialah kandungan terperinci Mengapakah Pembina Berfungsi Kadangkala Mengembalikan Nilai Bukan 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