Sejauh ini saya melihat tiga cara untuk membuat objek dalam JavaScript. Cara mana yang terbaik untuk membuat objek dan mengapa?
Saya juga melihat bahwa dalam semua contoh ini kata kunci var
tidak digunakan sebelum properti - mengapa? Apakah tidak perlu menyatakan var
sebelum nama properti karena disebutkan bahwa properti adalah variabel?
Dalam cara kedua dan ketiga, nama objek dalam huruf besar sedangkan dalam cara pertama nama objek dalam huruf kecil. Kasing apa yang harus kita gunakan untuk nama objek?
Cara pertama:
function person(fname, lname, age, eyecolor){
this.firstname = fname;
this.lastname = lname;
this.age = age;
this.eyecolor = eyecolor;
}
myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");
Cara kedua:
var Robot = {
metal: "Titanium",
killAllHumans: function(){
alert("Exterminate!");
}
};
Robot.killAllHumans();
Cara ketiga - objek JavaScript menggunakan sintaksis array:
var NewObject = {};
NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }
javascript
object
Jamna
sumber
sumber
var
, tolong .. dengan menghilangkannya menjadikannya globalObject.create()
:?Jawaban:
Tidak ada cara terbaik , itu tergantung pada kasus penggunaan Anda.
Person
(Anda harus memulai nama dengan huruf besar) disebut fungsi konstruktor . Ini mirip dengan kelas dalam bahasa OO lainnya.Pembaruan: Seperti contoh yang diminta untuk cara ketiga.
Properti tergantung:
Berikut ini tidak bekerja seperti
this
yang tidak mengacu padabook
. Tidak ada cara untuk menginisialisasi properti dengan nilai-nilai properti lainnya dalam objek literal:sebaliknya, Anda bisa melakukan:
Nama properti dinamis:
Jika nama properti disimpan dalam beberapa variabel atau dibuat melalui beberapa ekspresi, maka Anda harus menggunakan notasi braket:
sumber
...
untuk mewarisi dari objek lain?Ada berbagai cara untuk mendefinisikan suatu fungsi. Ini sepenuhnya didasarkan pada kebutuhan Anda. Berikut adalah beberapa gaya: -
Contoh:
Anda dapat mencobanya di konsol, jika Anda memiliki kebingungan.
sumber
var person
pada akhirnya? misalnya dalam konstruktor fungsi yang bisa Anda tambahkanvar person = new Person("Anand")
. dan ada apa dengan penggunaan semi-colon yang tampaknya acak? : PTidak ada "cara terbaik" untuk membuat objek. Setiap cara memiliki manfaat tergantung pada kasus penggunaan Anda.
Pola konstruktor (fungsi yang dipasangkan dengan
new
operator untuk menjalankannya) menyediakan kemungkinan menggunakan pewarisan prototypal, sedangkan cara lain tidak. Jadi jika Anda ingin warisan prototipal, maka fungsi konstruktor adalah cara yang baik untuk pergi.Namun, jika Anda menginginkan warisan prototipal, Anda dapat menggunakannya
Object.create
, yang membuat warisan tersebut menjadi lebih jelas.Membuat objek literal (contoh:)
var obj = {foo: "bar"};
berfungsi dengan baik jika Anda memiliki semua properti yang ingin Anda siapkan saat penciptaan.Untuk menyetel properti nanti,
NewObject.property1
sintaks umumnya lebih disukaiNewObject['property1']
jika Anda tahu nama properti. Tetapi yang terakhir berguna ketika Anda tidak benar-benar memiliki nama properti sebelumnya (misNewObject[someStringVar]
. :) .Semoga ini membantu!
sumber
Saya kira itu tergantung pada apa yang Anda inginkan. Untuk objek sederhana, saya kira Anda bisa menggunakan metode kedua. Ketika objek Anda tumbuh lebih besar dan Anda berencana menggunakan objek yang serupa, saya kira metode pertama akan lebih baik. Dengan begitu Anda juga dapat memperluasnya menggunakan prototipe.
Contoh:
Saya bukan penggemar berat dari metode ketiga, tetapi ini sangat berguna untuk mengedit properti secara dinamis, misalnya
var foo='bar'; var bar = someObject[foo];
.sumber
Ada banyak cara untuk membuat objek Anda di JavaScript. Menggunakan fungsi konstructer untuk membuat objek atau objek notasi literal menggunakan banyak dalam JavaScript. Juga membuat turunan Obyek dan kemudian menambahkan properti dan metode untuk itu, ada tiga cara umum untuk melakukan membuat objek dalam JavaScript.
Fungsi pembuat
Ada fungsi konstruktor bawaan yang kita semua dapat menggunakannya dari waktu ke waktu, seperti Date (), Number (), Boolean () dll, semua fungsi konstruktor dimulai dengan huruf kapital, sementara itu kita dapat membuat fungsi konstruktor kustom di JavaScript seperti ini:
dan Anda dapat memintanya, cukup menggunakan new (), untuk membuat instance konstruktor baru, membuat sesuatu seperti di bawah ini dan memanggil fungsi konstruktor dengan parameter terisi:
Objek literal
Menggunakan literal objek adalah kasus pembuatan objek yang sangat sering digunakan dalam JavaScript, ini contoh membuat objek sederhana, Anda dapat menetapkan apa saja ke properti objek Anda selama didefinisikan:
Prototyping
Setelah membuat Obyek, Anda dapat membuat prototipe lebih banyak anggota untuk itu, misalnya menambahkan warna ke Kotak kami, kami dapat melakukan ini:
sumber
Sementara banyak orang di sini mengatakan tidak ada cara terbaik untuk membuat objek, ada alasan mengapa ada begitu banyak cara untuk membuat objek dalam JavaScript, pada 2019, dan ini ada hubungannya dengan kemajuan JavaScript melalui berbagai iterasi yang berbeda. rilis EcmaScript dating kembali ke tahun 1997.
Sebelum ECMAScript 5, hanya ada dua cara untuk membuat objek: fungsi konstruktor atau notasi literal (alternatif yang lebih baik untuk Obyek baru ()). Dengan notasi fungsi konstruktor Anda membuat objek yang dapat dipakai menjadi beberapa instance (dengan kata kunci baru), sedangkan notasi literal memberikan objek tunggal, seperti singleton.
Terlepas dari metode yang Anda gunakan, objek JavaScript hanyalah properti pasangan nilai kunci:
Dalam versi awal JavaScript, satu-satunya cara nyata untuk meniru warisan berbasis kelas adalah dengan menggunakan fungsi konstruktor. fungsi konstruktor adalah fungsi khusus yang dipanggil dengan kata kunci 'baru'. Dengan konvensi, pengenal fungsi dikapitalisasi, albiet tidak diperlukan. Di dalam konstruktor, kami merujuk pada kata kunci 'ini' untuk menambahkan properti ke objek yang fungsi konstruktor buat secara implisit. Fungsi konstruktor secara implisit mengembalikan objek baru dengan properti yang dihuni kembali ke fungsi panggilan secara implisit, kecuali jika Anda secara eksplisit menggunakan kata kunci pengembalian dan mengembalikan sesuatu yang lain.
Ada masalah dengan metode sayName. Biasanya, dalam bahasa pemrograman berbasis Object-Oriented Class, Anda menggunakan kelas sebagai pabrik untuk membuat objek. Setiap objek akan memiliki variabel instance sendiri, tetapi akan memiliki pointer ke metode yang didefinisikan dalam cetak biru kelas. Sayangnya, saat menggunakan fungsi konstruktor JavaScript, setiap kali dipanggil, ia akan mendefinisikan properti sayName baru pada objek yang baru dibuat. Jadi setiap objek akan memiliki properti sayName yang unik. Ini akan menghabiskan lebih banyak sumber daya memori.
Selain meningkatkan sumber daya memori, mendefinisikan metode di dalam fungsi konstruktor menghilangkan kemungkinan pewarisan. Sekali lagi, metode ini akan didefinisikan sebagai properti pada objek yang baru dibuat dan tidak ada objek lain, sehingga pewarisan tidak dapat berfungsi seperti itu. Oleh karena itu, JavaScript menyediakan rantai prototipe sebagai bentuk warisan, menjadikan JavaScript sebagai bahasa prototipe.
Jika Anda memiliki orang tua dan orang tua membagikan banyak properti anak, maka anak tersebut harus mewarisi properti tersebut. Sebelum ES5, hal itu dilakukan sebagai berikut:
Cara kami menggunakan rantai prototipe di atas memiliki kekhasan. Karena prototipe adalah tautan langsung, dengan mengubah properti dari satu objek dalam rantai prototipe, Anda juga akan mengubah properti yang sama dari objek lain. Jelas, mengubah metode warisan anak seharusnya tidak mengubah metode orang tua. Object.create menyelesaikan masalah ini dengan menggunakan polyfill. Dengan demikian, dengan Object.create, Anda dapat dengan aman memodifikasi properti anak dalam rantai prototipe tanpa memengaruhi properti yang sama induknya dalam rantai prototipe.
ECMAScript 5 memperkenalkan Object.create untuk menyelesaikan bug yang disebutkan di atas dalam fungsi konstruktor untuk pembuatan objek. Metode Object.create () MENCIPTAKAN objek baru, menggunakan objek yang ada sebagai prototipe objek yang baru dibuat. Karena objek baru dibuat, Anda tidak lagi memiliki masalah di mana memodifikasi properti anak dalam rantai prototipe akan mengubah referensi orang tua ke properti dalam rantai.
Sebelum ES6, berikut adalah pola kreasi umum untuk menggunakan fungsi constructor dan Object.create:
Sekarang Object.create ditambah dengan fungsi konstruktor telah banyak digunakan untuk pembuatan objek dan pewarisan dalam JavaScript. Namun, ES6 memperkenalkan konsep kelas, yang utamanya adalah sintaksis gula atas warisan berbasis prototipe JavaScript yang ada. Sintaks kelas tidak memperkenalkan model pewarisan berorientasi objek baru ke JavaScript. Dengan demikian, JavaScript tetap merupakan bahasa prototipe.
Kelas ES6 membuat pewarisan jauh lebih mudah. Kami tidak lagi harus menyalin fungsi prototipe kelas induk secara manual dan mengatur ulang konstruktor kelas anak.
Secara keseluruhan, 5 strategi berbeda dari Pembuatan Objek dalam JavaScript ini bertepatan dengan evolusi standar EcmaScript.
sumber
Pada contoh di atas Anda dapat melihat bahwa objek kosong sebenarnya memiliki properti.
Oke, pertama mari kita lihat mana yang merupakan cara terbaik:
Pada contoh di atas log akan menampilkan false.
Sekarang mari kita lihat mengapa cara pembuatan objek lainnya tidak benar.
Seperti yang dapat Anda lihat di atas, semua contoh masuk dengan benar. Yang berarti jika Anda memiliki kasus bahwa Anda memiliki
for in
lingkaran untuk melihat apakah objek memiliki properti mungkin akan membawa Anda ke hasil yang salah.Perhatikan bahwa cara terbaik itu tidak mudah. Anda harus mendefinisikan semua properti objek baris demi baris. Cara lain lebih mudah dan memiliki kode lebih sedikit untuk membuat objek tetapi Anda harus menyadari dalam beberapa kasus. Saya selalu menggunakan "cara lain" dengan cara dan satu solusi untuk peringatan di atas jika Anda tidak menggunakan cara terbaik adalah:
sumber
Secara umum ada 3 cara untuk membuat Objects-
Yang paling sederhana adalah menggunakan objek literal .
Meskipun metode ini adalah yang paling sederhana tetapi memiliki kelemahan yaitu jika objek Anda memiliki perilaku (fungsi di dalamnya), maka di masa depan jika Anda ingin membuat perubahan, Anda harus mengubahnya di semua objek .
Jadi dalam hal ini lebih baik menggunakan Fungsi Pabrik atau Konstruktor. (Siapa pun yang Anda suka)
Fungsi Pabrik adalah fungsi-fungsi yang mengembalikan objek.eg-
Fungsi Konstruktor adalah fungsi-fungsi yang menetapkan properti ke objek menggunakan kata kunci "this ".eg-
sumber