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:

Salin kod Kod adalah seperti 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?

Salin kod Kod adalah seperti berikut:

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:

Salin kod Kod adalah seperti berikut:

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`");
}
}

2. ini menunjuk ke objek yang memanggil fungsi

Lihat contoh di bawah:

Salin kod Kod adalah seperti berikut:

var x = 10;
var obj = {
x: 10,
output: function() {
//Output: benar
console.log(ini === obj);
Kembalikan ini.x;
},
innerobj: {
x: 30,
Output: function() {
//Output: benar
console.log(ini === obj.innerobj);
Kembalikan ini.x;
}
}
};
//Output: 10
console.log(obj.output());
//Output: 30
console.log(obj.innerobj.output());

3. ini menunjukkan objek global

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:

Salin kod Kod adalah seperti berikut:

var x = 100;
var obj = {
x: 10,
output: function() {
(fungsi() {
//Output: benar
console.log(tetingkap === ini);
//Output: Dalaman: 100
console.log("Batin:" this.x);
})();

Kembalikan ini.x;
}
};
//Output: 10
console.log(obj.output());

Apabila menggunakan penutupan, skop berubah dan ini menghala ke tetingkap (dalam penyemak imbas).

Salin kod Kod adalah seperti berikut:

var x = 100;
var obj = {
x: 10,
output: function() {
Kembalikan ini.x;
}
};
var output = obj.output;
//Output: 10
console.log(obj.output());
//Output: 100
console.log(output());
var obj2 = {
x: 30,
output: obj.output
}
//Output: 30
console.log(obj2.output());

Pada masa ini ini sentiasa menunjuk ke objek apabila fungsi dipanggil.

4 ini menunjuk ke objek yang diberikan oleh kaedah apply/call()

Salin kod Kod adalah seperti berikut:

var x = 100;
var obj = {
x: 10,
output: function() {
Kembalikan ini.x;
}
};
//Output: 10
console.log(obj.output());
var obj2 = {
x: 40,
output: obj.output
}
//Output: 40
console.log(obj.output.call(obj2));
//Output: 10
console.log(obj2.output.apply(obj));

5 Ini dalam fungsi panggil balik menghala ke objek yang ditunjuk oleh ini dalam fungsi yang memanggil panggilan balik

Salin kod Kod adalah seperti berikut:

//
$("#nama pengguna").on("klik", fungsi() {
console.log(this.value);
});

6. ini

dalam Function.prototype.bind

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:

Salin kod Kod adalah seperti berikut:

fungsi orang() {
kembalikan this.name;
}
//Function.prototype.bind
var per = person.bind({
nama: "zuojj"
});
console.log(per);
var obj = {
nama: "Ben",
orang: orang,
setiap: setiap
};
//Output: Ben, zuojj
console.log(obj.person(), obj.per());

Contoh 2:

Salin kod Kod adalah seperti berikut:

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());


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan