Objek Berorientasikan Objek (OOJS) 3 Cara Membuat Contoh Objek
Apabila bahasa pengaturcaraan adalah semua tentang objek, Perkara pertama yang perlu kita pelajari ialah bagaimana untuk membuat objek. Membuat objek dalam JavaScript agak mudah: sepasang kurungan keriting akan melakukan pekerjaan itu, bagaimanapun, itu bukan satu-satunya cara untuk membuat objek atau satu-satunya cara anda perlu menggunakannya.
Dalam JavaScript, contoh objek adalah dicipta dari objek terbina dalam dan muncul apabila program berjalan. Sebagai contoh, Tarikh
adalah objek terbina dalam yang memberikan maklumat tentang tarikh. Jika kami ingin menunjukkan tarikh semasa pada halaman, kami memerlukan contoh masa runtuh Tarikh
yang membawa maklumat tentang tarikh semasa.
JavaScript juga membolehkan kami tentukan objek kita sendiri yang boleh menghasilkan contoh benda mereka sendiri semasa runtime. Dalam JavaScript, semuanya adalah objek dan setiap objek mempunyai leluhur muktamad dipanggil Objek
. Penciptaan contoh objek dipanggil instantiation.
1. The baru
pengendali
Salah satu kaedah yang paling umum dan terkenal untuk membuat contoh objek baru adalah dengan menggunakan baru
pengendali.
Anda perlukan a pembina untuk membuat baru
kerja pengendali. Pembina adalah kaedah objek yang meletakkan satu contoh baru objek itu. Sintaks asasnya kelihatan seperti ini:
pembina baru ()
Pembina boleh menerima hujah yang boleh digunakan untuk menukar atau menambah sifat kepada contoh objek yang dibina. Pembina mempunyai nama yang sama sebagai objek yang dimiliki.
Berikut adalah contoh bagaimana untuk mencipta contohnya Tarikh()
objek dengan baru
kata kunci:
dt = Tarikh baru (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100
Tarikh()
adalah pembina untuk membuat yang baru Tarikh
objek. Pembina yang berbeza untuk objek mengambil hujah yang berbeza untuk mewujudkan contoh objek yang sama dengan sifat-sifat yang berbeza-beza.
Tidak semua objek terbina dalam JavaScript boleh instantiated seperti Tarikh
. Terdapat objek itu jangan datang dengan pembina: Matematik
, JSON
dan Terangkan
, tetapi mereka masih objek biasa.
Antara objek terbina dalam yang mempunyai pembina (s), Simbol
tidak boleh dipanggil dalam gaya pembina untuk memberi instantiate baru Simbol
contohnya. Ia hanya boleh dipanggil sebagai fungsi yang pulangan yang baru Simbol
nilai.
Selain itu, di antara objek terbina dalam yang mempunyai pembina, tidak semua memerlukan konstruktor mereka dipanggil dengan baru
pengendali untuk dijadikan instantiated. Fungsi
, Array
, Ralat
, dan RegExp
juga boleh dipanggil sebagai fungsi, tanpa menggunakan baru
kata kunci, dan mereka akan memberi contoh dan mengembalikan contoh objek baru.
2. The Terangkan
objek
Pengaturcara backend mungkin sudah biasa dengan API refleksi. Refleksi adalah ciri bahasa pengaturcaraan memeriksa dan mengemaskini beberapa entiti asas, seperti objek dan kelas, semasa runtime.
Dalam JavaScript, anda sudah boleh melakukan sesetengah operasi pantulan menggunakan Objek
. Tetapi, a API Refleksi yang betul akhirnya wujud dalam JavaScript juga.
The Terangkan
objek mempunyai satu set kaedah untuk mencipta dan mengemaskini keadaan objek. The Terangkan
objek tidak mempunyai pembina, jadi ia tidak boleh instantiated dengan baru
pengendali, dan, sama seperti Matematik
dan JSON
, ia tidak boleh dipanggil sebagai fungsi sama ada.
Walau bagaimanapun, Terangkan
mempunyai bersamaan dengan baru
pengendali: Reflect.construct ()
kaedah.
Reflect.construct (target, argumentsList [, newTarget])
Kedua sasaran
dan pilihan newTarget
hujah adalah objek yang mempunyai konstruktor sendiri, sementara argumentsList
ialah senarai hujah untuk diserahkan kepada pembina sasaran
.
var dt = Reflect.construct (Tarikh, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100
Kod di atas mempunyai kesan yang sama sebagai instantiating Tarikh()
menggunakan baru
pengendali. Walaupun anda masih boleh menggunakannya baru
, Refleksi adalah ECMAScript 6 standard. Ia juga membolehkan anda untuk menggunakannya newTarget
hujah, yang merupakan satu kelebihan berbanding dengan baru
pengendali.
Nilai newTarget
prototaip (tepatnya, ia adalah prototaip newTarget
pembina) menjadi prototaip contoh yang baru diwujudkan.
Prototaip adalah harta Objek, nilai yang mana juga objek, membawa sifat objek asal. Pendek kata, objek mendapat ahli-ahlinya daripada prototaipnya.
Di sini, mari lihat contoh:
kelas A constructor () this.message = function () console.log ('message from A') data () console.log ('data dari B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // mesej dari A console.log (obj.data ()); / / data dari B console.log (obj instanceof B) // true
Dengan lulus B
sebagai hujah ketiga untuk Reflect.construct ()
, nilai prototaip obj
objek adalah dibuat sama sebagai prototaip B
pembina (yang mempunyai sifat-sifatnya mesej
dan data
).
Oleh itu, obj
boleh mengakses mesej
dan data
, boleh didapati di prototaipnya. Tetapi, sejak obj
dibuat menggunakan A
, ia juga mempunyai sendiri mesej
ia terima daripada A
.
Walaupun obj
dibina sebagai tatasusunan, ia adalah bukan contoh Array
, kerana prototaipnya ditetapkan untuk Objek
.
obj = Reflect.construct (Array, [1,2,3], Objek) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
boleh berguna apabila anda ingin membuat objek menggunakan lebih daripada satu cetakan biru.
3. The Objek.create ()
kaedah
Anda juga boleh mencipta objek biasa baru dengan prototaip tertentu melalui Objek.create ()
. Ini juga mungkin kelihatan sangat serupa dengan menggunakan baru
pengendali, tetapi tidak.
Object.create (O [, propertiesObject])
The O
hujah adalah objek yang berfungsi sebagai prototaip untuk objek baru yang akan dibuat. Pilihannya propertiesObject
hujah adalah a senarai hartanah anda mungkin mahu menambah objek baru.
var obj = Object.create (baru A (), data: writable: true, configurable: true, value: function () return 'data from obj') console.log (obj.message ()) // message from A console.log (obj.data ()) // data from obj obj1 = Object.create ( baru A (), foo: writable: true, configurable: true, value: function () return 'foo from obj1') console.log (obj1.message ()) // message from A console. log (obj1.foo ()) // foo dari obj1
Di dalam obj
objek, harta ditambah ialah data
, semasa dalam obj1
, ia adalah foo
. Jadi, seperti yang anda lihat, kita boleh sifat dan kaedah ditambah ke objek baru.
Ini hebat apabila anda mahu membuatnya pelbagai objek yang sama tetapi dengan ciri atau kaedah tambahan yang berlainan. The Objek.create ()
sintaks menyelamatkan masalah pengkodan semua secara berasingan.