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
Lepaskan: 2024-12-31 08:57:09
asal
478 orang telah melayarinya

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  
    }
}
Salin selepas log masuk

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan