Rumah >hujung hadapan web >tutorial js >Mengapa Tidak Kemas Kini Harta Pembina JavaScript dalam Warisan Prototaip?

Mengapa Tidak Kemas Kini Harta Pembina JavaScript dalam Warisan Prototaip?

DDD
DDDasal
2024-12-06 18:34:12580semak imbas

Why Doesn't JavaScript's Constructor Property Update in Prototypal Inheritance?

Memahami Pewarisan JavaScript dan Harta Pembina

Dalam JavaScript, pewarisan dicapai melalui pewarisan prototaip, di mana objek mewarisi sifat dan kaedah daripada objek lain melalui rantai prototaipnya. Sifat pembina memainkan peranan penting dalam mekanisme ini.

Warisan dan Harta pembina

Pertimbangkan kod berikut:

function a() {}
function b() {}
function c() {}

b.prototype = new a();
c.prototype = new b();

console.log((new a()).constructor); //a()
console.log((new b()).constructor); //a()
console.log((new c()).constructor); //a()

Mengapa tidak 't pembina dikemas kini untuk b dan c? Ini kerana dalam JavaScript, sifat pembina tidak diberikan kepada contoh secara langsung; sebaliknya, ia terletak pada objek prototaip. Ia menyimpan rujukan kepada fungsi pembina yang mencipta objek. Dalam contoh di atas, prototaip b dan c ditetapkan kepada contoh a, itulah sebabnya pembina untuk ketiga-tiga kejadian dilaporkan sebagai a().

Amalan Terbaik untuk Mengemas kini pembina

Untuk mengemas kini sifat pembina untuk kelas yang diwarisi, pendekatan biasa ialah menggunakan perantaraan fungsi:

function base() {}
function derive() {
  derive.superclass = base.prototype;
  derive.prototype = new derive.superclass();

  derive.prototype.constructor = derive;
}

Teknik ini memastikan bahawa sifat pembina kejadian terbitan ditetapkan dengan betul kepada fungsi terbitan.

Instanceof dan Rantaian Prototaip

Walaupun pembina (c()) baharu adalah sama dengan a(), ia masih boleh bagi instanceof untuk mengenal pasti c() baharu dengan betul sebagai contoh bagi c. Ini kerana instanceof menyemak rantaian prototaip objek contoh. Dalam kes ini, rantaian prototaip untuk c() baharu membawa kembali kepada prototaip c.

console.log(new a() instanceof a); //true
console.log(new b() instanceof b); //true
console.log(new c() instanceof c); //true

Kesimpulan

Warisan JavaScript dan interaksi sifat pembina boleh kompleks, tetapi memahaminya adalah penting untuk pengaturcaraan berorientasikan objek yang berkesan dalam JavaScript. Dengan memahami konsep yang digariskan dalam artikel ini, anda boleh menulis kod yang mantap dan boleh diguna semula yang memanfaatkan warisan dan rantaian prototaip dengan berkesan.

Atas ialah kandungan terperinci Mengapa Tidak Kemas Kini Harta Pembina JavaScript dalam Warisan Prototaip?. 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