Warisan Prototaip Crockford: Objek Bersarang dan Warisan
Javascript: The Good Parts" Douglas Crockford menyokong untuk memudahkan pewarisan objek .create() kaedah untuk mengelakkan perangkap kata kunci baharu. Walau bagaimanapun, kebimbangan telah timbul mengenai gelagat objek bersarang apabila menggunakan corak ini.
Untuk menggambarkan isu ini, pertimbangkan contoh berikut:
var flatObj = { firstname: "John", lastname: "Doe", age: 23 } var person1 = Object.create(flatObj); var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32 } } var person2 = Object.create(nestObj);
Dalam contoh di atas, objek person1 mewarisi daripada flatObj, dan objek person2 mewarisi daripada nestObj. Apabila sifat objek bersarang diubah suai dalam objek yang diwarisi, ia memberi kesan kepada objek bersarang sehingga rantai prototaip.
person1.age = 69; // Overwrites `age` in `person1` person2.info.age = 96; // Overwrites `age` in `person2` and `nestObj`
Akibatnya, objek bersarang asal diubah, walaupun perubahan itu bertujuan semata-mata untuk objek yang diwarisi.
Tingkah laku ini tidak konsisten untuk objek rata. Jika flatObj.age diubah suai, ia tidak menjejaskan harta umur orang1.
flatObj.age = 23; // Only affects `flatObj`
Ketidakkonsistenan timbul kerana objek bersarang dilayan secara berbeza daripada objek rata dalam corak warisan ini.
Mengatasi Had
Had corak dengan objek bersarang boleh ditangani dengan mencipta objek bebas untuk sifat bersarang sebelum menetapkannya:
person3 = { sex: "male" } person3.info = Object.create(nestObj2.info);
Dengan berbuat demikian, sifat info person3 menjadi objek bebas, tidak terjejas oleh perubahan yang dibuat pada objek bersarang di atas rantai prototaip.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan ini tidak mencipta objek bebas sepenuhnya. Jika sifat objek bersarang dipadamkan pada objek yang diwarisi, ia juga akan dipadamkan daripada objek prototaip:
delete child.x; // (child).x.a == 0, because child inherits from parent
Ringkasnya, corak warisan prototaip Crockford dengan objek bersarang memang mempunyai had. Walau bagaimanapun, pengehadan ini boleh diatasi sebahagiannya dengan mencipta objek bebas untuk sifat bersarang sebelum menetapkannya.
Atas ialah kandungan terperinci Bagaimanakah Warisan Prototaip Crockford Mengendalikan Objek Bersarang dan Warisannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!