Dalam buku JavaScript Ninja Secrets, terdapat perpustakaan prototaip dan contoh kod ikatan fungsi:
Function.prototype.bind = function(){
var fn = this, args = Array.prototype.slice.call(arguments),
object = args.shift();
return function(){
return fn.apply(object,args.concat(Array.prototype.slice.call(arguments)));
};
};
var myObject = {a:"1"};
function myFunction(){
return this == myObject;
};
var aFunction = myFunction.bind(myObject);
aFunction();
Saya menggunakan titik putus untuk menyemak fungsibind
里面的fn指向myFunction
这个函数 这个我不太理解 我的理解是只要用Function.prototype
这个原型扩展的方法 此方法里面开始声明的变量var fn=this;
中fn
的指向就指向使用这个方法的函数 就像本例中的myFunction.bind(myObject);
调用bin
方法,fn
指向myFunction
Fungsi ini, saya tidak tahu sama ada ini cara yang betul untuk memahaminya
Sebenarnya, saya tidak begitu memahami soalan anda, jadi mari kita lihat kod dengan idea
myFunction.bind(myObject) memasuki fungsi bind prototaip
Tugaskan myFunction kepada fn, tukar parameter kepada args tatasusunan, padam parameter pertama dan tetapkan ia kepada objek.
Kembalikan fungsi, kemudian fikirkan tentang penutupan, dan kemudian anda akan faham. Kerja yang dilakukan oleh fungsi ini boleh difahami dengan mudah sebagai myFunction.apply(myObject,[...di sini adalah parameter lain])
aFungsi()
Ia adalah myFunction.apply(myObject,[...tidak ada parameter di sini])
Kemudian masukkan bahagian dalam myFunction, kerana hubungan antara apply, ini adalah myObject, dan kemudian kerjanya ialah myObject==myObject
Return benar