Saya muak dengan selalu harus menulis kode seperti ini:
function shallowExtend(obj1,obj2){
var key;
for ( key in obj2 ) {
if ( obj2.hasOwnProperty(key) === false ) continue;
obj1[key] = obj2[key]
}
}
Atau jika saya tidak ingin menulis kode sendiri, terapkan perpustakaan yang sudah melakukannya. Tentunya ES6 + akan datang untuk menyelamatkan ini akan memberi kita sesuatu seperti Object.prototype.extend(obj2...)
atauObject.extend(obj1,obj2...)
Jadi apakah ES6 + menyediakan fungsionalitas seperti itu? Jika belum ada di sana, maka apakah fungsi tersebut direncanakan? Jika tidak direncanakan, lalu mengapa tidak?
javascript
ecmascript-6
balupton
sumber
sumber
[[Prototype]]
rantai? Apakah Anda membuat salinan "dalam" atau "dangkal"? Bagaimana dengan properti non-enumerable dan non-dapat ditulis? Saya pikir saya lebih suka memiliki fungsi perpustakaan kecil yang melakukan apa yang saya butuhkan, dan sebagian besar itu bisa dihindari.Jawaban:
Anda akan dapat melakukan penggabungan / perluasan / penetapan dangkal di ES6 dengan menggunakan Object.assign:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Sintaksis:
di mana ... sumber mewakili objek sumber.
Contoh:
sumber
let merged = Object.assign({}, source1, source2);
Object.assign
: lihat jawaban saya di siniJSON.parse(JSON.stringify(src))
Anda dapat menggunakan sintaks penyebaran objek untuk ini:
Untuk array operator spread sudah menjadi bagian dari ES6 (ES2015), tetapi untuk objek ditambahkan ke spec bahasa di ES9 (ES2018). Usulannya telah diaktifkan secara default di alat-alat seperti Babel jauh sebelum itu.
sumber
const ob1 = {foo: 123}; const ob2 = {bar: 234}; const merged = {...ob1, ...ob2}; console.log(merged)
Output:{ foo: 123, bar: 234 }
Saya tahu ini sedikit masalah lama tapi solusi termudah di ES2015 / ES6 sebenarnya cukup sederhana, menggunakan Object.assign (),
Semoga ini bisa membantu, ini juga menggabungkan DEEP :
Contoh penggunaan:
sumber
Penambahan
Object.mixin
saat ini sedang dibahas untuk menangani perilaku yang Anda minta. https://mail.mozilla.org/pipermail/es-discuss/2012-December/027037.htmlMeskipun belum ada dalam draft ES6, sepertinya ada banyak dukungan untuk itu, jadi saya pikir ini akan segera muncul di draft.
sumber
.mixin
telah dijatuhkan oleh TC39.ES6
ES7 atau Babel
sumber
Mungkin
Object.defineProperties
metode ES5 akan melakukan pekerjaan itu?misalnya
Dokumentasi MDN: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperties
sumber
defineProperties
mendefinisikan properti sendiri. Itu tidak menimpa properti pada[[prototype]]
rantai, itu membayangi mereka.Object.getOwnPropertyDescriptor
juga untuk mengatur properti ketika itu adalah nilai yang kompleks, atau Anda akan menyalin dengan referensi.