1. Model pabrik
Function Person (Name, Umur) {var p = objek baru (); p.name = name; P.age = usia; p.showmessage = function () {console.log ("name:"+this.name+"usia:"+this.age); } return p;} var p1 = person ("k1", 28); var p2 = person ("k2", 29); console.log (p1.showmessage == p2.showmessage); // false bukanlah console metode showmessage yang sama.Cacat pola pabrik adalah bahwa masalah pengenalan objek tidak diselesaikan, dan metode showmessage dari masing -masing objek bukanlah metode yang sama (setiap metode diciptakan kembali pada setiap instance objek), yang meningkatkan overhead
2. Mode Konstruktor
function person (name, use) {this.name = name; this.age = usia; this.showmessage = function () {console.log ("name:"+this.name+"usia:"+this.age); }} var p1 = orang baru ("k1", 28); var p2 = orang baru ("k2", 29); console.log (p1.showmessage == p2.showmessage); // false bukan metode showmessage yang sama.Pola konstruktor memecahkan masalah pengenalan objek, tetapi metode showmessage dari masing -masing objek bukanlah metode yang sama (setiap metode diciptakan kembali pada setiap instance objek), yang meningkatkan overhead
3. Mode prototipe
function person () {} person.prototype.name = "k"; person.prototype.age = 29; person.prototype.showmessage = function () {console.log ("name:"+this.name+"usia:"+this.age);}; var p1 = new orang (); p1.show: "+this.age);}; var p1 = new orang (); p1.show:"+this.age);}; var p1 = new orang (); p1.show: "+this.age);}; var p1 = new orang (); p1.show:"+this. Person (); p2.showmessage (); // Nama: k Usia: 29console.log (p1.showmessage == p2.showmessage); // true -referensi adalah fungsi yang sama konsol.log (p1.constructor)/[orang] --Object pengakuan konsol.log (p1 personel)/[Person] -objek pengakuan konsol. console.log (person.prototype.isprototypeof (p1)); // trueconsole.log (objek.getPrototypeOf (p1) == person.prototype); // truePola prototipe memecahkan masalah "setiap metode diciptakan kembali pada setiap instance objek" dan juga memecahkan masalah pengenalan objek.
Masalah besar dengan mode prototipe adalah bahwa semua objek, variabel, dan fungsi yang dipasang di bawah prototipe fungsi dibagikan oleh semua contoh fungsi. Meskipun sifat -sifat prototipe dapat diakses melalui instance P1 dan P2, nilai properti tidak dapat dimodifikasi. Misalnya, p1.name = "k1", itu hanya menambahkan properti nama = "k1" pada instance p1, dan tidak berubah menjadi prototipe.name. Tidak apa -apa jika itu tipe nilai, tetapi jika itu jenis referensi, akan ada masalah. Lihat contoh berikut
function person () {}; person.prototype.age = 10; person.prototype.array = [1,2,3]; var p1 = orang baru (); var p2 = orang baru (); console.log (p1.array); // [1.2,3] console.log (p2.array); // media1,2,3 mediap1.array.push(4);console.log(p1.array) ;//anjang1,2,3,4 mediaconsole.log(p2.array);// 5,2,3,4]P1 menambahkan nilai pada array, yang juga tercermin dalam P2 karena semuanya menunjuk ke array yang sama
4. Menggabungkan mode konstruktor dan mode prototipe
Ini adalah cara paling umum untuk membuat objek, menggabungkan keunggulan konstruktor dan pola prototipe
function person (name, use) {this.name = name; this.age = usia;} person.prototype.showmessage = function () {console.log ("name:"+this.name+"usia:"+this.age);}; var p1 = orang baru ("k", 30); p1.showmessage ();5. Mode Prototipe Dinamis
Solusi utamanya adalah: merangkum semua informasi dalam konstruktor, yang lebih sesuai dengan gagasan OO
function person (name, use) {this.name = name; this.age = usia; if (typeof this.showMessage! = "function") {person.prototype.showmessage = function () {console.log ("name:"+this.name+"usia:"+this.age); }}} var p1 = orang baru ("k", 30); p1.showmessage ();6. Pola konstruktor parasit
function person (name, use) {var o = new objek (); o.name = nama; o.age = usia; o.sayname = function () {console.log (this.name); }; return o;} var p1 = orang baru ("k", 28); p1.sayname ();Pola konstruktor parasit persis sama dengan pola pabrik, kecuali bahwa kata kunci baru digunakan saat membuat objek. Contoh di atas: var p1 = orang baru ("k", 28).
Fungsi utamanya adalah: untuk memperluas fungsi dalam konstruktor ini. Misalnya, saya ingin mendefinisikan tipe array myArray, yang didasarkan pada array array dan memiliki metode sendiri, sebagai berikut
function myArray () {var values = new array (); values.push.apply (nilai, argumen); // Metode yang didefinisikan oleh Nilai Sendiri.topipedString = function () {return this.join ('|'); }; nilai pengembalian;} var colors = myArray baru ("merah", "biru", "hijau"); console.log (colors.topipedString ()); console.log (Colors instance dari array);7. mode konstruktor yang stabil
Konstruktor yang aman mengikuti pola dari jenis konstruktor parasit, tetapi ada dua perbedaan: satu tidak menggunakan ini, dan yang lainnya tidak menggunakan yang baru untuk memanggil konstruktor.
function person (name, use) {var o = new objek (); var Tempage = usia; o.name = nama; o.age = usia; o.sayname = function () {console.log (name); } o.sayage = function () {console.log (tempage); } return o;} var p1 = person ("k1", 28); p1.sayname (); // k1p1.sayage (); // 28p1.name = "k2"; p1.age = 30; p1.sayname (); // k1p1.sayage (); // 28Ketika Anda melihat output di atas, Anda dapat memahami apa pola objek yang aman. Ini adalah objek yang dibuat menggunakan mode ini. Tidak ada cara lain untuk mengubah nilai yang dilewati selama inisialisasi. Ini adalah orang ("K1", 28). Objek seperti itu adalah objek yang aman. Bahkan, ini adalah penutupan JavaScript.
Analisis singkat di atas dari metode membuat objek JavaScript adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.