Selama proses pengembangan, kita sering menghadapi kebutuhan untuk membuat banyak objek serupa, yang mungkin memiliki banyak properti atau metode yang identik. Jadi, metode apa yang bisa kita gunakan untuk membuat banyak objek? Apa metode terbaik? Mari kita lihat bersama!
Metode literal suatu objek adalah salah satu cara paling umum untuk membuat objek. Properti objek yang dibuat dalam metode literal dapat ditulis, dihitung, dan dikonfigurasi secara default.
Kode berikut menunjukkan cara membuat banyak objek menggunakan metode literal:
//Membuat banyak objek menggunakan metode literal var person1 = { nama: 'selai', usia: 18, alamat: 'Kota Shanghai', makan: fungsi () { console.log(nama ini + 'Makan') } } var orang2 = { nama: 'tom', usia: 20, alamat: 'Kota Beijing', makan: fungsi () { console.log(nama ini + 'Makan') } } var orang3 = { nama: 'pengapuran', usia: 19, alamat: 'Kota Tianjin', makan: fungsi () { console.log(nama ini + 'Makan') } }
经过上述示例代码我们可以看出,仅仅创建了3个对象就用了24行,可以看出字面量方式的弊端:创建同样的对象时,需要编写重复的代码太多。
Pola pabrik sebenarnya adalah pola desain yang umum;
Biasanya kita akan memiliki metode pabrik yang melaluinya kita dapat menghasilkan objek yang diinginkan;
kode berikut menunjukkan pengoperasian metode mode pabrik untuk membuat banyak objek:
//Membuat beberapa objek menggunakan fungsi pabrik fungsi createPerson (nama, umur, alamat) ) { var p = {} p.nama = nama hal.umur = umur p.alamat = alamat hal.makan = fungsi () { console.log(nama + 'Makan') } kembali hal } var p1 = createPerson('jam', 19, 'Kota Shanghai') var p2 = createPerson('tom', 14, 'Beijing') var p3 = createPerson('li', 13, 'Kota Tianjin') p3.eating() // Saat li sedang makan,
可以看出使用工厂模式方法创建了三个对象使用的代码明显比字面量少了好多行,but这就是最好的方式了吗?NO! NO! NO!
工厂模式方法的**弊端**就在于:以上述示例代码为例。当我们打印p1,p2,p3后,获取不到对象最真实的类型,比如p1是人还是动物还是工具
Konstruktor Saya yakin semua orang sudah familiar dengannya dia. Yang disebut fungsi konstruktor adalah fungsi yang menyediakan templat untuk menghasilkan suatu objek dan menjelaskan struktur dasar objek tersebut. Sebuah konstruktor dapat menghasilkan banyak objek, masing-masing dengan struktur yang sama.
Kode berikut menunjukkan penggunaan metode konstruktor untuk membuat beberapa objek:
// Spesifikasi konvensional, huruf pertama nama konstruktor dikapitalisasi fungsi Orang (nama, umur, alamat) { ini.nama = nama this.age = usia this.address = alamat ini.makan = fungsi () { console.log(nama ini + 'Makan') } ini.berjalan = fungsi () { console.log(nama ini + 'berjalan') } } var p1 = Orang baru('jam', 20, 'Beijing') var p2 = Orang baru('tom', 14, 'Kota Shanghai') var p3 = Orang baru('li', 13, 'Kota Tianjin') konsol.log(p1) // Hasil keluaran // Orang { // nama: 'selai', // usia: 20, // alamat: 'Beijing', // makan: [Fungsi], // berjalan: [Fungsi] // } p1.eating() // Jam
Kekurangan: Setiap metode harus dibuat ulang pada setiap instance.
构造函数有个不成文的规范,那就是构造函数的名字首字母大写或者驼峰。
构造函数方式并不是最完美的创建多个对象的方式,也是有缺点的。
缺点:每个方法都要在每个实例上重新创建一遍,比如同样的eating方法和running方法都需要在p1,p2,p3的实例上去创建一遍,浪费很多的内存空间
adalah dengan mendefinisikan atribut instance pada konstruktor, lalu hanya parameter ini yang perlu diteruskan saat membuat objek. Objek prototipe digunakan untuk mendefinisikan metode dan properti bersama.
Kode berikut menunjukkan cara membuat beberapa objek menggunakan prototipe dan konstruktor:
function Person (nama, umur, alamat) { ini.nama = nama this.age = usia this.address = alamat ini.makan = ini.berjalan = fungsi () { console.log(nama ini + 'berjalan') } } // Tambahkan metode makan dan metode lari ke prototipe, sehingga Anda tidak perlu menambahkan metode yang sama di memori setiap kali Anda membuat objek. Person.prototype.eating = function () { console.log(nama ini + 'Makan') } Orang.prototipe.berjalan = fungsi() { console.log(nama ini + 'berjalan') } var p1 = Orang baru('jam', 20, 'Beijing') var p2 = Orang baru('tom', 14, 'Kota Shanghai') var p3 = Orang baru('li', 13, 'Kota Tianjin') konsol.log(p1) //Hasil keluaran: // Orang { // nama: 'selai', // usia: 20, // alamat: 'Beijing', // makan: [Fungsi], // berjalan: [Fungsi] // } p1.eating() //
最后的当然是压轴的呀,这种原型和构造函数方式是目前在ECMAScript中使用得最广泛、认同度最高的一种创建对象的方法。
Setelah membaca ini, apakah menurut Anda membuat banyak objek tidak terlalu rumit? Anda dapat membuatnya dalam hitungan menit menggunakan metode prototipe dan konstruktor.