Konsep warisan prototaip Douglas Crockford menyediakan pendekatan yang dipermudahkan untuk penciptaan objek, seperti yang ditunjukkan dalam fungsi "Object.create". Walau bagaimanapun, pengguna mungkin menghadapi kesukaran apabila berurusan dengan objek bersarang dalam rangka kerja warisan ini. Khususnya, timpa nilai objek bersarang boleh menjejaskan objek lain di sepanjang rantai prototaip, yang membawa kepada hasil yang tidak dijangka.
Untuk menggambarkan kebimbangan, pertimbangkan coretan kod berikut:
// Flat object var flatObj = { firstname: "John", lastname: "Doe", age: 23 } // Nested object var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32 } }
Dalam senario ini, mencipta objek baharu menggunakan "Object.create" dan cuba mengubah suai nilai objek bersarang menghasilkan perubahan yang tidak diingini pada objek prototaip:
// Objects created using Object.create var person1 = Object.create(flatObj); // Flat object inheritance var person2 = Object.create(nestObj); // Nested object inheritance // Overwriting nested object values person1.age = 69; person2.info.age = 96; // Prototype objects have been modified console.log(nestObj.info.age); // Outputs 96 instead of 32
Isu teras berpunca daripada fakta bahawa semua objek, termasuk yang bersarang, dianggap seperti sifat objek standard. Apabila mengubah suai nilai objek bersarang, perubahan itu disebarkan bukan sahaja kepada objek semasa tetapi juga kepada mana-mana objek lain yang mewarisi daripada prototaip yang sama.
Oleh itu, jika anda ingin mengekalkan objek bersarang bebas, adalah penting untuk cipta objek baru untuk mereka dan bukannya bergantung pada warisan. Contohnya:
// Creating an independent nested object person3 = { sex: "male", info: Object.create(nestObj2.info) // Create a new object for the nested "info" property }
Dengan berbuat demikian, anda memastikan bahawa perubahan pada nilai objek bersarang hanya mempengaruhi objek tertentu dan tidak menyebarkan rantai prototaip.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengubah Suai Objek Bersarang dalam Warisan Prototaip Crockford?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!