Javascript kata kunci ini penerangan terperinci_pengetahuan asas
WBOY
Lepaskan: 2016-05-16 16:33:05
asal
1191 orang telah melayarinya
1. ini menunjuk kepada objek yang diwujudkan oleh pembina
Dalam artikel sebelumnya, kami menyebut perbezaan antara memanggil pembina menggunakan baharu dan tidak menggunakan baharu, seperti yang ditunjukkan dalam contoh berikut:
fungsi Benjamin(nama pengguna, jantina) {
This.username = nama pengguna;
This.sex = seks;
}
var benjamin = Benjamin baharu("zuojj", "lelaki");
//Output: Benjamin{jantina: "lelaki", nama pengguna: "zuojj"}
console.log(benjamin);
var ben = Benjamin("zhangsan", "perempuan");
//Output: undefined
console.log(ben);
Apabila pembina dipanggil sebagai fungsi biasa, tiada nilai pulangan, dan ini menunjukkan kepada objek global. Jadi, bagaimanakah kita boleh mengelakkan masalah yang disebabkan oleh kekurangan kata kunci baharu?
fungsi Benjamin(nama pengguna, jantina) {
//Semak sama ada "ini" ialah objek "Benjamin"
jika (contoh Benjamin ini) {
This.username = nama pengguna;
This.sex = seks;
}lain {
Kembalikan Benjamin baharu(nama pengguna, jantina);
}
}
var benjamin = Benjamin baharu("zuojj", "lelaki");
//Output: Benjamin{jantina: "lelaki", nama pengguna: "zuojj"}
console.log(benjamin);
var ben = Benjamin("zhangsan", "perempuan");
//Output: Benjamin {nama pengguna: "zhangsan", jantina: "perempuan"}
console.log(ben);
Dalam contoh di atas, kami mula-mula menyemak sama ada ini adalah contoh Benjamin. Jika tidak, gunakan yang baharu untuk memanggil pembina secara automatik dan membuat seketika Ini bermakna kita tidak perlu lagi bimbang tentang kehilangan kata kunci baharu untuk membuat seketika pembina. Sudah tentu, kita mungkin mengembangkan tabiat buruk dengan cara ini. Bagaimana jika kita mengelakkan fenomena ini? Kita boleh membuang ralat seperti ini:
fungsi Benjamin(nama pengguna, jantina) {
//Semak sama ada "ini" ialah objek "Benjamin"
jika(contoh Benjamin ini) {
This.username = nama pengguna;
This.sex = seks;
}lain {
// Jika tidak, buang ralat.
buang Ralat baharu("`Benjamin` dipanggil tanpa `baru`");
}
}
Apabila kami membincangkan pembina di atas, kami juga membincangkan bahawa apabila baharu tidak berkenaan, ini akan menunjukkan kepada objek global Mari kita lihat dua contoh biasa kesilapan mudah:
Kaedah bind() mencipta fungsi baharu yang, apabila dipanggil, menetapkan kata kunci ini kepada nilai yang disediakan, dengan urutan argumen yang diberikan mendahului mana-mana yang disediakan apabila fungsi baharu dipanggil.
Contoh 1:
ini.x = 9;
modul var = {
x: 81,
getX: function() { return this.x;
};
//Output: 81
console.log(module.getX());
var getX = module.getX;
//Output: 9, kerana dalam kes ini, "ini" merujuk kepada objek global
console.log(getX);
// cipta fungsi baharu dengan 'ini' terikat pada modul
var boundGetX = getX.bind(modul);
//Output: 81
console.log(boundGetX());
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