Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengubah Suai Objek Bersarang dalam Warisan Prototaip Crockford?

Bagaimana untuk Mengelakkan Tingkah Laku Tidak Dijangka Apabila Mengubah Suai Objek Bersarang dalam Warisan Prototaip Crockford?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 08:57:09559semak imbas

How to Avoid Unexpected Behavior When Modifying Nested Objects in Crockford's Prototypal Inheritance?

Warisan Prototaip Crockford: Menangani Kebimbangan Bersarang

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!

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