Warisan JavaScript: Memahami Harta Pembina
Soalan:
Pertimbangkan kod:
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 bukan harta pembina dikemas kini untuk b dan c, walaupun menetapkan prototaip mereka untuk diwarisi daripada a?
Jawapan:
Untuk memahami perkara ini, mari kita memulakan perjalanan konseptual:
Sekarang, persoalan timbul: kenapa sifat pembina tidak ditakrifkan pada objek contoh itu sendiri? Pertimbangkan contoh berikut:
function defclass(prototype) { var constructor = prototype.constructor; constructor.prototype = prototype; return constructor; } var Square = defclass({ constructor: function (side) { this.side = side; }, area: function () { return this.side * this.side; } }); var square = new Square(10); console.log(square.area()); // 100
Dalam contoh ini, sifat pembina ialah kaedah prototaip seperti yang lain. Walau bagaimanapun, ia digunakan secara khusus untuk memulakan kejadian prototaip.
Mentakrifkan sifat pembina pada prototaip memberikan beberapa kelebihan:
Warisan dan Harta Pembina
Dalam kes pewarisan, sifat prototaip pembina terbitan ditetapkan kepada contoh pembina asas . Akibatnya, sifat dalaman [[proto]] bagi contoh pembina terbitan juga menunjuk kepada prototaip pembina asas. Ini menghasilkan sifat pembina contoh pembina terbitan yang menunjuk kepada pembina asas.
Operator instanceof
Operator instanceof beroperasi pada objek instance dan fungsi pembina. Bertentangan dengan kepercayaan popular, ia tidak bergantung pada sifat pembina contoh itu. Sebaliknya, ia merentasi rantaian prototaip contoh dan menyemak sama ada sifat [[proto]] dalamannya sepadan dengan sifat prototaip pembina. Padanan mengembalikan benar, manakala penghujung rantai prototaip mengembalikan palsu.
Atas ialah kandungan terperinci Mengapa Tidak Kemas Kini Harta `pembina` JavaScript Semasa Pewarisan Prototaip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!