JavaScript Berorientasi Objek (OOJS) 3 Cara Membuat Objek Obyek
Ketika bahasa pemrograman semua tentang benda, hal pertama yang perlu kita pelajari adalah cara membuat objek. Membuat objek dalam JavaScript cukup mudah: sepasang kurung kurawal akan melakukan pekerjaan itu, yaitu tidak satu-satunya jalan untuk membuat objek atau satu-satunya jalan Anda harus menggunakannya.
Dalam JavaScript, instance objek adalah dibuat dari objek bawaan dan muncul ketika program sedang berjalan. Sebagai contoh, Tanggal
adalah objek bawaan yang memberi kami informasi tentang tanggal. Jika kami ingin menampilkan tanggal saat ini di sebuah halaman, kami membutuhkan contoh runtime dari Tanggal
yang membawa informasi tentang tanggal saat ini.
JavaScript juga memungkinkan kita mendefinisikan objek kita sendiri yang dapat menghasilkan instance objek mereka sendiri di runtime. Dalam JavaScript, semuanya adalah objek dan setiap objek memiliki leluhur tertinggi bernama Obyek
. Penciptaan instance objek disebut Instansiasi.
1. The baru
operator
Salah satu metode yang paling umum dan terkenal untuk membuat instance objek baru adalah dengan menggunakan baru
operator.
Anda membutuhkan konstruktor untuk membuat baru
pekerjaan operator. Konstruktor adalah metode objek yang menyatukan a contoh baru dari objek itu. Sintaks dasarnya terlihat seperti ini:
konstruktor baru ()
Seorang konstruktor dapat terima argumen yang dapat digunakan untuk mengubah atau menambahkan properti ke instance objek yang dibangunnya. Konstruktor memiliki nama yang sama sebagai objek miliknya.
Berikut adalah contoh cara membuat contoh dari Tanggal()
obyek dengan baru
kata kunci:
dt = Tanggal baru (2017, 0, 1) console.log (dt) // Minggu 01 Jan 2017 00:00:00 GMT + 0100
Tanggal()
adalah konstruktor untuk membuat yang baru Tanggal
obyek. Konstruktor yang berbeda untuk suatu objek ambil argumen yang berbeda untuk membuat jenis instance objek yang sama dengan atribut yang bervariasi.
Tidak semua objek bawaan dalam JavaScript dapat dibuat seperti itu Tanggal
. Ada benda-benda itu jangan datang dengan konstruktor: Matematika
, JSON
dan Mencerminkan
, tapi mereka masih benda biasa.
Di antara objek bawaan yang memiliki konstruktor, Simbol
tidak dapat dipanggil dalam gaya konstruktor untuk instantiate yang baru Simbol
contoh. Itu hanya bisa disebut sebagai fungsi yang mengembalikan yang baru Simbol
nilai.
Juga, di antara objek bawaan yang memiliki konstruktor, tidak semua memerlukan konstruktor untuk dipanggil dengan baru
operator untuk dipakai. Fungsi
, Array
, Kesalahan
, dan RegExp
bisa juga disebut sebagai fungsi, tanpa menggunakan baru
kata kunci, dan mereka akan instantiate dan mengembalikan instance objek baru.
2. The Mencerminkan
obyek
Programmer backend mungkin sudah tidak asing lagi API Refleksi. Refleksi adalah fitur bahasa pemrograman untuk memeriksa dan memperbarui beberapa entitas dasar, seperti objek dan kelas, saat runtime.
Dalam JavaScript, Anda sudah bisa melakukan beberapa operasi refleksi menggunakan Obyek
. Tapi, a API Refleksi yang tepat akhirnya ada di JavaScript juga.
Itu Mencerminkan
objek memiliki seperangkat metode untuk buat dan perbarui instance objek. Itu Mencerminkan
obyek tidak memiliki konstruktor, jadi tidak bisa dipakai dengan baru
operator, dan, sama seperti Matematika
dan JSON
, saya t tidak bisa disebut sebagai fungsi antara.
Namun, Mencerminkan
memiliki setara dengan baru
operator: itu Reflect.construct ()
metode.
Reflect.construct (target, argumentsList [, newTarget])
Keduanya target
dan opsional target baru
argumen adalah benda memiliki konstruktor sendiri, sementara argumentsList
adalah daftar argumen untuk diteruskan ke konstruktor target
.
var dt = Reflect.construct (Tanggal, [2017, 0, 1]); console.log (dt); // Minggu 01 Jan 2017 00:00:00 GMT + 0100
Kode di atas memiliki efek yang sama sebagai instantiating Tanggal()
menggunakan baru
operator. Meskipun Anda masih bisa menggunakannya baru
, Refleksi adalah suatu ECMAScript 6 standar. Ini juga memungkinkan Anda memanfaatkan target baru
argumen, yang merupakan keunggulan lain dari baru
operator.
Nilai dari target baru
Prototipe (tepatnya, ini adalah prototipe target baru
konstruktor) menjadi prototipe dari instance yang baru dibuat.
Prototipe adalah milik Obyek, nilai yang ada juga merupakan objek, membawa properti dari objek asli. Singkatnya, suatu objek mendapatkan anggotanya dari prototipe.
Di sini, mari kita lihat sebuah contoh:
class A constructor () this.message = function () console.log ('message from A') kelas B constructor () message () console.log ('message from B') data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // pesan dari A console.log (obj.data ()); // data dari B console.log (obj instance B) // benar
Dengan melewati B
sebagai argumen ketiga Reflect.construct ()
, nilai prototipe dari obj
objek adalah dibuat sama sebagai prototipe dari B
Konstruktor (yang memiliki properti pesan
dan data
).
Demikian, obj
dapat mengakses pesan
dan data
, tersedia di prototipe-nya. Tapi sejak itu obj
dibuat menggunakan SEBUAH
, itu juga memiliki sendiri pesan
saya t diterima dari SEBUAH
.
Meskipun obj
dibangun sebagai sebuah array, itu bukan turunan dari Array
, karena prototipe diatur ke Obyek
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (objek instance dari Array) // false
Reflect.construct ()
dapat berguna saat Anda ingin membuat objek menggunakan lebih dari satu cetak biru.
3. The Object.create ()
metode
Anda juga dapat membuat objek biasa baru dengan prototipe tertentu melalui Object.create ()
. Ini, juga, mungkin tampak sangat mirip dengan menggunakan baru
operator, tetapi tidak.
Object.create (O [, propertiesObject])
Itu HAI
Argumen adalah objek yang melayani prototipe untuk objek baru yang akan dibuat. Opsional propertiObject
argumen adalah a daftar properti Anda mungkin ingin menambahkan ke objek baru.
class A constructor () message () console.log ('message from A') var obj = Object.create (A baru), data: dapat ditulis: true, dapat dikonfigurasi: true, nilai: function () return 'data from obj') console.log (obj.message ()) // pesan dari A console.log (obj.data ()) // data dari obj obj1 = Object.create ( A baru (), foo: dapat ditulis: benar, dapat dikonfigurasi: benar, nilai: function () kembalikan 'foo from obj1') console.log (obj1.message ()) // pesan dari konsol. log (obj1.foo ()) // foo dari obj1
Dalam obj
objek, properti yang ditambahkan adalah data
, saat di obj1
, nya foo
. Jadi, seperti yang Anda lihat, kita dapat memiliki properti dan metode ditambahkan ke objek baru.
Ini bagus ketika Anda ingin membuat beberapa objek dari jenis yang sama tetapi dengan sifat atau metode tambahan yang berbeda. Itu Object.create ()
sintaks menghemat kesulitan pengkodean semuanya secara terpisah.