Saya bingung ke mana saya harus membuat objek di javascript. Sepertinya setidaknya ada dua cara. Salah satunya adalah dengan menggunakan notasi literal objek sedangkan yang lainnya menggunakan fungsi konstruksi. Apakah ada keuntungan yang satu dibandingkan yang lain?
javascript
chobo
sumber
sumber
Jawaban:
Jika Anda tidak memiliki perilaku yang terkait dengan suatu objek (yaitu jika objek tersebut hanya wadah untuk data / status), saya akan menggunakan literal objek.
Terapkan prinsip KISS . Jika Anda tidak memerlukan apa pun selain wadah data sederhana, gunakan literal sederhana.
Jika Anda ingin menambahkan perilaku ke objek Anda, Anda dapat menggunakan konstruktor dan menambahkan metode ke objek selama konstruksi atau memberikan prototipe kelas Anda.
Kelas seperti ini juga bertindak seperti skema untuk objek data Anda: Anda sekarang memiliki semacam kontrak (melalui konstruktor) properti apa yang diinisialisasi / berisi objek. Literal gratis hanyalah gumpalan data yang tidak berbentuk.
Anda mungkin juga memiliki
verify
fungsi eksternal yang bekerja pada objek data lama biasa:Namun, ini tidak menguntungkan sehubungan dengan enkapsulasi: Idealnya, semua data + perilaku yang terkait dengan suatu entitas harus hidup bersama.
sumber
this.fn = function ...
pendekatan dalam konstruktor, setiap instance objek Anda akan memiliki salinan fungsinya sendiri. Dengan menggunakan pendekatan prototipe, Anda melampirkan setiap fungsi sekali dan hanya sekali: fungsi tersebut akan diwarisi oleh instance melalui pewarisan prototipe.Ini pada dasarnya bermuara pada apakah Anda membutuhkan banyak contoh dari objek Anda atau tidak; objek yang ditentukan dengan konstruktor memungkinkan Anda memiliki beberapa contoh objek itu. Literal objek pada dasarnya adalah lajang dengan variabel / metode yang semuanya bersifat publik.
sumber
Cara lain untuk membuat objek dengan cara yang seragam adalah dengan menggunakan fungsi yang mengembalikan objek:
Karena fungsi dalam JavaScript adalah closure, kita dapat menggunakan variabel dan metode privat dan menghindarinya
new
.Dari http://javascript.crockford.com/private.html tentang variabel pribadi di JavaScript.
sumber
Kode di bawah ini menunjukkan tiga metode membuat objek, sintaks Objek Literal, Pembuat Fungsi dan
Object.create()
. Sintaks literal objek hanya membuat dan objek dengan cepat dan dengan demikian itu__prototype__
adalahObject
objek dan itu akan memiliki akses ke semua properti dan metodeObject
. Ketat dari perspektif pola desain, literal Objek sederhana harus digunakan untuk menyimpan satu contoh data.Konstruktor fungsi memiliki properti khusus bernama
.prototype
. Properti ini akan menjadi__prototype__
salah satu objek yang dibuat oleh konstruktor fungsi. Semua properti dan metode yang ditambahkan ke.prototype
properti konstruktor fungsi akan tersedia untuk semua objek yang dibuatnya. Konstruktor harus digunakan jika Anda memerlukan beberapa contoh data atau memerlukan perilaku dari objek Anda. Perhatikan bahwa konstruktor fungsi juga paling baik digunakan saat Anda ingin mensimulasikan pola pengembangan pribadi / publik. Ingatlah untuk meletakkan semua metode bersama pada.prototype
sehingga mereka tidak akan dibuat di setiap contoh objek.Membuat objek dengan
Object.create()
memanfaatkan literal objek sebagai__prototype__
objek yang dibuat dengan metode ini. Semua properti dan metode yang ditambahkan ke literal objek akan tersedia untuk semua objek yang dibuat darinya melalui pewarisan prototipe yang sebenarnya. Ini adalah metode pilihan saya.sumber
Object.create
fungsi di dalam literal akan menjadi unik per instance?Itu tergantung pada apa yang ingin Anda lakukan. Jika Anda ingin menggunakan variabel atau fungsi privat (semi-) di objek Anda, fungsi konstruktor adalah cara untuk melakukannya. Jika objek Anda hanya berisi properti dan metode, literal objek tidak masalah.
Sekarang metode
multiply5
masukmyObj
danSomeLiteral
lakukan hal yang persis sama. Satu-satunya perbedaan adalah myObj menggunakan variabel privat. Yang terakhir mungkin berguna dalam beberapa kasus. Seringkali sebuah literal Objek cukup dan cara yang bagus dan bersih untuk membuat objek JS.sumber
Apakah Anda ingin satu contoh objek untuk halaman - Literal.
Apakah Anda ingin mentransfer data seperti objek DTO sederhana GET SET: - Literal
Apakah Anda ingin membuat objek nyata dengan perilaku metode, beberapa contoh - Fungsi pembuat, Ikuti prinsip OOP, pewarisan: - Fungsi pembuat.
Di bawah ini adalah video youtube yang menjelaskan secara rinci apa itu literal, apa itu fungsi konstruktor dan bagaimana perbedaannya satu sama lain.
https://www.youtube.com/watch?v=dVoAq2D3n44
sumber
Gunakan literal objek, itu lebih padat dan berkembang lebih baik dengan pengenalan nilai awal.
sumber
Seperti disebutkan di https://www.w3schools.com/js/js_object_definition.asp
Juga
sumber
JavaScript Berorientasi Objek Udacity
sumber
Sebenarnya, methinks, kita dapat memiliki metode privat dalam literal objek. Pertimbangkan kode di bawah ini:
Soal selera, tapi saya lebih suka menggunakan literal objek jika memungkinkan.
sumber
// Objek literal dan konstruktor objek
sumber