1. Apa itu konstruktor
Konstruktor sangat umum dalam beberapa bahasa yang berorientasi objek seperti Java, C ++, dan PHP. Dalam JavaScript, konstruktor pertama adalah fungsi normal, yang dapat dipanggil menggunakan operator baru dan menghasilkan objek tipe khusus.
Salinan kode adalah sebagai berikut:
// "Benjamin" adalah konstruktor
var benjamin = Benjamin baru ("zuojj", "laki -laki");
Dalam contoh di atas, Benjamin adalah objek Benjamin, jadi bagaimana cara instantiate?
Salinan kode adalah sebagai berikut:
fungsi benjamin (nama pengguna, seks) {
this.username = nama pengguna;
this.sex = seks;
}
var benjamin = Benjamin baru ("zuojj", "laki -laki");
// outputs: Benjamin {sex: "Male", nama pengguna: "zuojj"}
Console.log (Benjamin);
Seperti yang dapat kita lihat, konstruktor "Benjamin" hanya menerima parameter yang dilewati dan menugaskannya ke objek ini. Ini karena ketika konstruktor dipanggil oleh operator baru, objek konstruktor ini ditugaskan ke objek yang dikembalikan oleh operasi baru.
Ini berarti bahwa kode di atas setara dengan:
Salinan kode adalah sebagai berikut:
benjamin = {
"Nama pengguna": "zuojj",
"seks": "pria"
}
2. Mengapa menggunakan konstruktor
Ada beberapa alasan mengapa konstruktor digunakan:
1. Menggunakan konstruktor berarti bahwa semua objek ini dapat dibuat menggunakan struktur dasar yang sama.
2. Menggunakan konstruktor berarti bahwa objek "Benjamin" secara eksplisit ditandai sebagai instance dari fungsi "Benjamin"
Salinan kode adalah sebagai berikut:
fungsi benjamin (nama pengguna, seks) {
this.username = nama pengguna;
this.sex = seks;
}
var benjamin = Benjamin baru ("zuojj", "laki -laki");
var ben = {
"Nama pengguna": "zuojj",
"seks": "pria"
}
// Output: Benar
console.log (Benjamin Contoh dari Benjamin);
// Output: Salah
Console.log (Ben Contoh Benjamin);
3. Menggunakan konstruktor berarti bahwa kita dapat mendefinisikan metode publik pada prototipe untuk berbagi beberapa instance
Salinan kode adalah sebagai berikut:
fungsi benjamin (nama pengguna, seks) {
this.username = nama pengguna;
this.sex = seks;
}
Benjamin.prototype.getName = function () {
kembalikan nama ini;
}
var benjamin = Benjamin baru ("zuojj", "laki -laki");
var ben = baru Benjamin ("Lemon", "Female");
// Output: Zuojj
console.log (benjamin.getname ());
// Output: Lemon
console.log (ben .getname ());
3. Hal -hal yang perlu diperhatikan
1. Kata kunci baru
Saat instantiasi konstruktor, Anda tidak boleh lupa menggunakan kata kunci baru. Apakah akan menggunakan kata kunci baru akan memiliki dampak besar pada objek ini. Tanpa kata kunci baru, objek ini akan menunjuk ke objek global (jendela di browser dan global di simpul). Oleh karena itu, ketika mendefinisikan konstruktor, disarankan bahwa huruf pertama dari nama fungsi dikapitalisasi.
2. Jika fungsi yang dipanggil tidak memiliki ekspresi pengembalian eksplisit, objek ini akan dikembalikan secara implisit, yang merupakan objek yang baru dibuat. Jika tidak, hasilnya akan terpengaruh, tetapi hanya jika objek yang dikembalikan
Salinan kode adalah sebagai berikut:
function bar () {
kembali 2;
}
var bar = bar baru ();
// kembalikan objek yang baru dibuat
// outputs: bar {}
console.log (bar);
function test () {
this.value = 2;
kembali {
foo: 1
};
}
var test = tes baru ();
// objek yang dikembalikan
// outputs: objek {foo: 1}
console.log (tes);
Yang perlu kita perhatikan adalah:
a) bar baru () mengembalikan objek yang baru dibuat, bukan nilai literal dari angka 2. Oleh karena itu bar baru (). Konstruktor === Bar, tetapi jika objek angka yang dikembalikan, hasilnya akan berbeda;
b) tes baru () yang diperoleh di sini adalah objek yang dikembalikan oleh fungsi, bukan objek yang baru dibuat melalui kata kunci baru, seperti yang ditunjukkan di bawah ini:
Salinan kode adalah sebagai berikut:
function bar () {
kembali 2;
}
var bar = bar baru ();
function barn () {
mengembalikan nomor baru (2);
}
var barn = barn baru ();
// Output: Benar
console.log (bar.constructor === bar);
// output: angka {}
Console.log (gudang);
// ouputs: false
Console.log (Barn.Constructor === Barn);
// Output: Benar
Console.log (Barn.Constructor === Number);
/ * -------------------------------------- *//
function test () {
this.value = 2;
kembali {
foo: 1
};
}
var test = tes baru ();
// Output: Tidak ditentukan
console.log (test.value);
// ouputs: 1
console.log (test.foo);
Di atas adalah ringkasan konstruktor. Saya berharap ini akan membantu bagi pemula. Jika ada poin yang tidak pantas dalam artikel ini, saya berharap dapat mengkritik dan memperbaikinya.