我读了一些关于 JS 中的绑定实现(来自 John Resig 的书):
它看起来像这样:(jsbin)
#1Function.prototype.bind = function ()
#2{
#3 var fn = this,
#4 args = Array.prototype.slice.call(arguments),
#5 object = args.shift();
#6
#7 return function ()
#8 {
#9 return fn.apply(object, args.concat(Array.prototype.slice.call(arguments)));
#10 };
#11 };
我可以像这样测试它:
var myObject = {};
function myFunction()
{
return this == myObject;
}
//---------
if (!myFunction()) alert("Context is not set yet"); //not set ye
var bindedFunction= myFunction.bind(myObject)
if (bindedFunction()) alert( "Context is set properly"); //set properly
//---------
但是我有两个问题:
Question #1
在第 3 行中,this
is 指的是执行的函数,对吗?但不this
应该是:“拥有函数的对象”?
如果我alert(this)
在绑定函数内部执行,我会看到:
function myFunction()
{
return this == myObject;
}
Question #2
在第 #9 行,为什么返回的函数是
return function ()
{
return fn.apply ...
};
而不是
return function ()
{
fn.apply ...
};
我不明白:
返回的函数创建一个闭包,并且应该返回一个只执行的函数 fn.apply(o....
我不明白为什么它会返回额外return
的:就像在return fn.apply(o....