Pengenalan
Semua orang sudah biasa dengan pembina, tetapi jika anda seorang pemula, anda masih perlu memahami apa itu pembina. Pembina digunakan untuk mencipta objek jenis tertentu - bukan sahaja ia mengisytiharkan objek untuk digunakan, pembina juga boleh menerima parameter untuk menetapkan nilai ahli objek apabila objek itu mula-mula dicipta. Anda boleh menyesuaikan pembina anda sendiri dan mengisytiharkan sifat atau kaedah objek jenis tersuai di dalamnya.
Penggunaan asas
Dalam JavaScript, pembina biasanya digunakan untuk melaksanakan kejadian JavaScript tidak mempunyai konsep kelas, tetapi terdapat pembina khas. Dengan memanggil fungsi yang ditentukan menggunakan kata kunci baharu, anda boleh memberitahu JavaScript bahawa anda ingin mencipta objek baharu dan pengisytiharan ahli objek baharu semuanya ditakrifkan dalam pembina. Di dalam pembina, kata kunci ini merujuk kepada objek yang baru dibuat. Penggunaan asas adalah seperti berikut:
var tom= Kereta baru("Pakcik", 2009, 20000);
var dudu= New Car("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
Contoh di atas ialah corak pembina yang sangat mudah, tetapi terdapat beberapa masalah. Pertama sekali, menggunakan warisan sangat menyusahkan Kedua, output() ditakrifkan semula setiap kali objek dibuat Cara terbaik adalah dengan membenarkan semua contoh jenis Kereta berkongsi kaedah output() ini, supaya jika terdapat besar bilangan kejadian Jika ya, ia akan menjimatkan banyak memori.
Untuk menyelesaikan masalah ini, kita boleh menggunakan kaedah berikut:
format fungsiCar() {
Kembalikan this.model "Gone" this.miles "Kilometers";
}
Pembina dan prototaip
Fungsi dalam JavaScript mempunyai atribut prototaip yang dipanggil prototaip Apabila pembina dipanggil untuk mencipta objek, semua atribut prototaip pembina tersedia pada objek yang baru dibuat. Mengikut ini, berbilang contoh objek Kereta boleh berkongsi prototaip yang sama Mari kembangkan kod contoh di atas:
/*
Nota: Di sini kami menggunakan nama kaedah Object.prototype dan bukannya Object.prototype
Digunakan terutamanya untuk mengelak daripada menulis semula objek prototaip prototaip yang ditentukan
*/
Car.prototype.output= function () {
Kembalikan this.model "Gone" this.miles "Kilometers";
};
var tom = Kereta baru("Pakcik", 2009, 20000);
var dudu = Kereta baharu("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
Juga: Kami mengesyorkan agar pembina bermula dengan huruf besar untuk membezakannya daripada fungsi biasa.
Bolehkah saya hanya menggunakan yang baru?
Contoh di atas semuanya menggunakan baru untuk mencipta objek untuk kereta fungsi Adakah ini satu-satunya cara? Sebenarnya ada cara lain, kami senaraikan dua:
//Kaedah 1: Panggilan sebagai fungsi
Kereta("Pakcik", 2009, 20000); //Tambah pada objek tingkap
console.log(window.output());
//Kaedah 2: Panggilan dalam skop objek lain
var o = Objek baharu();
Car.call(o, "Dudu", 2010, 5000);
console.log(o.output());
Paksa baharu
Contoh di atas menunjukkan masalah tidak menggunakan baharu, jadi adakah cara untuk kita memaksa pembina menggunakan kata kunci baharu Jawapannya ya, kod di atas:
var tom = Kereta baru("Pakcik", 2009, 20000);
var dudu = Kereta("Dudu", 2010, 5000);
console.log(typeof tom); // "objek"
console.log(tom.output()); // "Pakcik telah berjalan sejauh 20,000 kilometer"
console.log(typeof dudu); // "objek"
console.log(dudu.output()); // "Dudu berjalan sejauh 5000 kilometer"
Fungsi pembalut asal
Terdapat tiga fungsi pembalut primitif dalam JavaScript: nombor, rentetan, boolean Kadangkala kedua-duanya digunakan:
// Ini disyorkan
var s = "rentetan saya";
var n = 101;
var b = benar;
//rentetan asal
var greet = new String("Hello there");
// Pisahkan
menggunakan kaedah split().
greet.split(' ')[0]; // "Hello"
// Menambah atribut baharu pada jenis fungsi pembungkus tidak akan menyebabkan ralat
salam.senyum = benar;
// Sifat baharu boleh diakses seperti biasa
console.log(typeof greet.smile); // "boolean"
Ringkasan
Bab ini menerangkan terutamanya cara menggunakan corak pembina, cara memanggilnya dan perbezaan antara kata kunci baharu saya harap semua orang akan memberi perhatian kepadanya apabila menggunakannya.
Rujukan: http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript