Rumah  >  Artikel  >  hujung hadapan web  >  Nota Kajian Javascript - Fungsi (5): Constructor_Basic Knowledge

Nota Kajian Javascript - Fungsi (5): Constructor_Basic Knowledge

WBOY
WBOYasal
2016-05-16 16:30:331134semak imbas

Pembina dalam Javascript juga berbeza berbanding bahasa lain. Sebarang fungsi yang dipanggil dengan kata kunci baharu boleh digunakan sebagai pembina.
Dalam badan pembina, ini menunjuk kepada objek yang baru dibuat. Jika tiada ungkapan pulangan yang dipaparkan dalam badan pembina, maka kami akan mengembalikannya secara lalai, iaitu objek yang baru dibuat.

Salin kod Kod adalah seperti berikut:

fungsi Foo() {
This.bla = 1;
}
Foo.prototype.test = function() {
console.log(this.bla);
};
var test = new Foo();

Kod di atas memanggil Foo sebagai pembina dan menunjuk prototaip (__proto__) objek baharu kepada Foo.prototype.
Jika kita mentakrifkan ungkapan pulangan dalam pembina, pembina akan mengembalikan keseluruhan ungkapan, tetapi ungkapan pulangan ini mestilah objek.

Salin kod Kod adalah seperti berikut:

fungsi Bar() {
Kembali 2;
}
new Bar(); // objek baharu
function Test() {
This.value = 2;
Kembali {
foo: 1
};
}
new Test(); // objek yang dikembalikan

Jika baharu ditinggalkan, fungsi tidak akan dapat mengembalikan objek baharu.

Salin kod Kod adalah seperti berikut:

fungsi Foo() {
This.bla = 1; // ditetapkan pada objek global
}
Foo(); // undefined

Contoh di atas mungkin juga berfungsi dalam beberapa senario, tetapi disebabkan mekanisme kerja ini dalam Javascript, ini akan menunjuk ke objek global.

Mod Kilang

Untuk dapat melakukannya tanpa kata kunci baharu, pembina perlu mengembalikan nilai secara eksplisit.

Salin kod Kod adalah seperti berikut:

fungsi Bar() {
nilai var = 1;
Kembali {
Kaedah: function() {
              nilai pulangan;
}
}
}
Bar.prototaip = {
foo: function() {}
};
Bar baharu();
Bar();

Dalam contoh di atas, kesan memanggil Bar fungsi tanpa menggunakan yang baru adalah sama Objek yang baru dibuat yang mengandungi kaedah kaedah akan dikembalikan.
Satu perkara yang perlu diperhatikan di sini ialah Bar() baharu tidak akan mengembalikan Bar.prototype, tetapi objek prototaip kaedah fungsi dalam ungkapan pulangan.
Dalam contoh di atas, tiada perbezaan fungsi antara menggunakan baharu atau tidak.

Buat objek baharu melalui corak kilang

Kita sering diingatkan supaya tidak menggunakan yang baru kerana terlupa penggunaannya akan membawa kepada kesilapan.
Untuk mencipta objek, kami lebih suka menggunakan corak kilang dan membina objek baharu di dalam corak kilang.

Salin kod Kod adalah seperti berikut:

fungsi Foo() {
var obj = {};
Obj.value = 'blub';

var peribadi = 2;
Obj.someMethod = fungsi(nilai) {
This.value = value;
}

obj.getPrivate = function() {
         kembali secara peribadi;
}
Kembalikan obj;
}

Walaupun kod di atas kurang terdedah kepada ralat berbanding menggunakan baharu dan akan lebih mudah apabila menggunakan pembolehubah persendirian, ia juga mempunyai beberapa kelemahan:

Oleh kerana objek prototaip tidak boleh dikongsi, lebih banyak memori diperlukan.
Untuk melaksanakan pewarisan, corak kilang perlu menyalin semua kaedah objek lain atau menggunakannya sebagai prototaip objek baharu.
Meninggalkan rantaian prototaip hanya untuk mengelak daripada menggunakan yang baru nampaknya bertentangan dengan semangat bahasa Javascript.

Ringkasan

Walaupun menggunakan yang baru mungkin lebih terdedah kepada ralat, ini tidak menjadi alasan untuk berputus asa menggunakan rantai prototaip. Bagi pendekatan terakhir, ia bergantung kepada keperluan permohonan. Cara terbaik ialah memilih gaya dan berpegang padanya.

Ringkasnya, pembina memulakan objek contoh, dan atribut prototaip objek mewarisi objek contoh.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn