Rumah >hujung hadapan web >tutorial js >Ringkasan penggunaan kaedah bind dalam ECMAScript5 (ES5)_Pengetahuan asas

Ringkasan penggunaan kaedah bind dalam ECMAScript5 (ES5)_Pengetahuan asas

WBOY
WBOYasal
2016-05-16 16:00:331149semak imbas

Saya sentiasa kabur tentang perkara yang berkaitan dengan ini, seperti panggilan, memohon, dsb. Kali ini saya melihat soalan ujian bertulis berkaitan bind, jadi saya menulis artikel ini sebagai peringatan.

 Bind, seperti memanggil dan memohon, boleh menukar ini yang ditunjukkan oleh konteks. Perbezaannya ialah panggilan, seperti apply, merujuk terus kepada kaedah, manakala bind mengembalikan kaedah selepas mengikat ini, tetapi teras dalaman masih digunakan.

Lihat terus pada contoh:

Salin kod Kod adalah seperti berikut:

var obj = {
a: 1,
b: 2,
getCount: fungsi(c, d) {
Kembalikan ini.a ini.b c d;
}
};

window.a = window.b = 0;
console.log(obj.getCount(3, 4)); // 10
var func = obj.getCount;
console.log(func(3, 4)); // 7

Mengapa ini berlaku? Kerana ini dalam konteks func ialah window! Kewujudan bind adalah untuk menukar penunjuk ini untuk mendapatkan nilai yang dikehendaki:

Salin kod Kod adalah seperti berikut:

var obj = {
a: 1,
b: 2,
getCount: fungsi(c, d) {
Kembalikan ini.a ini.b c d;
}
};

window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4)); // 10

Bind ialah kaedah pelanjutan fungsi fungsi Selepas bind, kod itu mengikat semula penunjuk ini (obj) di dalam func, tetapi ia tidak serasi dengan ie6~8 Kod yang serasi adalah seperti berikut:

Salin kod Kod adalah seperti berikut:

var obj = {
a: 1,
b: 2,
getCount: fungsi(c, d) {
Kembalikan ini.a ini.b c d;
}
};

Function.prototype.bind = Fungsi.prototype.bind || var itu = ini;
kembalikan fungsi() {
// console.log(arguments); // konsol [3,4] jika ie<6-8>
Kembalikan that.apply(context, arguments);

}
}
window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4)); // 10

Malah, pada pendapat saya, teras bind adalah untuk mengembalikan kaedah yang tidak dilaksanakan Jika anda menggunakan apply atau call terus:


Salin kod Kod adalah seperti berikut:
var ans = obj.getCount.apply(obj, [3, 4]);
console.log(ans); // 10

Adalah mustahil untuk menggunakan pembina fungsi func yang disingkat, jadi gunakan bind untuk lulus penunjuk ini, dan kemudian kembalikan kaedah yang tidak dilaksanakan Pelaksanaannya agak bijak.
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