Sebelumnya, ketika saya perlu menyimpan sejumlah variabel terkait, saya akan membuat kelas.
function Item(id, speaker, country) {
this.id = id;
this.speaker = spkr;
this.country = country;
}
var myItems = [
new Item(1, 'john', 'au'),
new Item(2, 'mary', 'us')
];
Tapi saya bertanya-tanya apakah ini praktik yang baik. Apakah ada cara lain yang lebih baik untuk mensimulasikan struct di Javascript?
javascript
struct
nickf
sumber
sumber
Saya selalu menggunakan literal objek
sumber
new READABLE_PART(ignore everything in here)
jadilah sangat mudah dipindai dan mendokumentasikan diri sendiri, bukan{read: "ignore", everything: "ignore", in: "ignore", here: "ignore"} // and then come up with READABLE_PART
di kepala Anda. Versi pertama dapat dibaca saat muncul dengan cepat. Yang kedua, Anda refactor menjadi struct hanya untuk memahami.Masalah sebenarnya adalah bahwa struktur dalam bahasa seharusnya merupakan tipe nilai, bukan tipe referensi. Jawaban yang diajukan menyarankan penggunaan objek (yang merupakan tipe referensi) sebagai pengganti struktur. Meskipun hal ini dapat memenuhi tujuannya, hal ini menghindari titik di mana seorang programmer sebenarnya menginginkan manfaat menggunakan tipe nilai (seperti primitif) sebagai pengganti tipe referensi. Jenis nilai, misalnya, tidak boleh menyebabkan kebocoran memori.
sumber
Saya pikir membuat kelas untuk mensimulasikan struct seperti C, seperti yang telah Anda lakukan, adalah cara terbaik .
Ini cara yang bagus untuk mengelompokkan data terkait dan menyederhanakan parameter yang diteruskan ke fungsi. Saya juga berpendapat bahwa kelas JavaScript lebih seperti struct C ++ daripada kelas C ++, mengingat upaya tambahan yang diperlukan untuk mensimulasikan fitur berorientasi objek nyata.
Saya telah menemukan bahwa mencoba membuat JavaScript lebih seperti bahasa lain menjadi rumit dengan cepat, tetapi saya sepenuhnya mendukung penggunaan kelas JavaScript sebagai struct tanpa fungsi.
sumber
Mengikuti jawaban Markus , dalam versi JS yang lebih baru (ES6 menurut saya) Anda dapat membuat pabrik 'struct' lebih sederhana menggunakan Fungsi Panah dan Parameter Istirahat seperti ini:
Hasil dari menjalankan ini adalah:
Anda dapat membuatnya terlihat mirip dengan nametuple Python:
Dan hasilnya:
sumber
Saya menggunakan objek gaya JSON untuk struct bodoh (tidak ada fungsi anggota).
sumber
Saya membuat perpustakaan kecil untuk mendefinisikan struct jika Anda bekerja dengan kompatibilitas ES6.
Ini adalah pengurai JKT, Anda dapat melakukan pembayaran repositori proyek di sini JKT Parser
Misalnya, Anda dapat membuat struct Anda seperti ini
sumber
Ini lebih banyak pekerjaan untuk disiapkan, tetapi jika pemeliharaan mengalahkan upaya satu kali maka ini mungkin kasus Anda.
Keuntungan:
sumber