Dalam JavaScript, kaedah sering melibatkan konteks, iaitu ini, jadi ia selalunya tidak boleh dipetik secara langsung Ambil console.log("info...") yang paling biasa sebagai contoh Elakkan menulis konsol yang panjang dan terus menggunakan log ( "info..."), anda secara automatik akan memikirkan sintaks berikut:
var log = console.log; log("info…");
Maaf, ralat berlaku semasa menjalankan: TypeError: Invocation haram.
Kenapa? Untuk console.log("info..."), kaedah log dipanggil pada objek konsol, jadi ini dalam kaedah log menghala ke objek konsol dan kami menggunakan pembolehubah log untuk menunjuk ke kaedah console.log, dan kemudian panggil kaedah log secara langsung Pada masa ini kaedah log ini menunjuk kepada objek tetingkap Jika konteksnya tidak konsisten, sudah tentu ralat akan dilaporkan.
Pada ketika ini kita boleh menggunakan kaedah bind untuk menyelesaikan masalah ini. Kaedah bind membolehkan anda memasukkan ini secara manual sebagai konteks kaedah semasa, dan kemudian mengembalikan kaedah yang memegang konteks, sebagai contoh:
var log = console.log.bind(console); log("info...");
Dengan cara ini tidak akan ada ralat.
Walau bagaimanapun, kaedah bind tidak menyokong pelayar IE 8 dan lebih rendah Kami boleh melaksanakannya sendiri, ia sangat mudah.
Function.prototype.bind = Function.prototype.bind || function(context){ var _this = this; return function(){ _this.apply(context, arguments); }; };
Teras dilaksanakan melalui kaedah pakai, aplikasi penutupan klasik. _ini menunjuk kepada kaedah semasa, dan konteks menunjukkan kepada konteks kaedah semasa, yang kedua-duanya diakses melalui penutupan.
Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.