Rumah >hujung hadapan web >tutorial js >Adakah Warisan Prototaip Crockford Mengendalikan Objek Bersarang Dengan Betul?

Adakah Warisan Prototaip Crockford Mengendalikan Objek Bersarang Dengan Betul?

Barbara Streisand
Barbara Streisandasal
2024-12-11 01:49:10259semak imbas

Does Crockford's Prototypal Inheritance Handle Nested Objects Correctly?

Crockford's Prototypal Inheritance: Issues with Nested Objects

Dalam bukunya "Javascript: The Good Parts", Douglas Crockford membentangkan corak untuk memudahkan pewarisan objek. Corak ini berdasarkan kaedah Object.create, yang membenarkan penciptaan objek baharu berdasarkan objek prototaip sedia ada.

Walaupun corak ini berfungsi dengan baik untuk objek rata, isu timbul apabila berurusan dengan objek bersarang. Menimpa nilai objek bersarang yang diwarisi menggunakan corak ini memberi kesan kepada elemen bersarang sehingga ke atas rantaian prototaip.

Sebagai contoh, dalam kod 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);

Menukar sifat umur daripada person1 mengemas kini sifat umur flatObj, tetapi menukar sifat umur person2.info mengemas kini sifat umur secara salah nestObj.info.

Tingkah laku ini tidak wujud pada warisan prototaip tetapi sebaliknya kepada cara JavaScript mengendalikan objek bersarang. Dalam JavaScript, harta objek boleh sama ada harta sendiri (ditakrifkan pada objek itu sendiri) atau harta warisan (diakses melalui rantaian prototaip). Apabila objek dibuat menggunakan Object.create, ia mewarisi semua sifat sendiri objek prototaipnya.

Untuk mengelakkan isu ini, objek bersarang harus ditugaskan secara eksplisit kepada objek baharu. Dalam contoh di atas, kod berikut akan mencipta objek maklumat bebas untuk person2:

var person2 = Object.create(nestObj);
person2.info = Object.create(nestObj.info);

Pengasingan objek bersarang ini memastikan perubahan yang dibuat pada objek maklumat person2 tidak menjejaskan objek info nestObj.

Atas ialah kandungan terperinci Adakah Warisan Prototaip Crockford Mengendalikan Objek Bersarang Dengan Betul?. 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