这取自John Resig的Learning Advanced Javascript#25,称为更改函数的上下文。
1)在fn() == this
行中这是指什么?它是指在函数里面说它返回这个吗?
2)虽然我理解了最后一行的目的(将函数附加到特定对象),但我不明白代码是如何做到的。 “call”这个词是预定义的JavaScript函数吗?用简单的语言,请解释“fn.call(object)”,并明确告诉我parens (object)
中的对象是否与var object
是同一个对象。
3)。将函数分配给对象后,是否可以通过编写object.fn();
?
var object = {};
function fn(){
return this;
}
assert( fn() == this, "The context is the global object." );
assert( fn.call(object) == object, "The context is changed to a specific object."
答案 0 :(得分:7)
call
是为Function
对象定义的函数。 call
的第一个参数是this
在被调用函数内引用的对象。
在没有任何特定上下文的情况下调用fn()
时,this
引用全局上下文或浏览器环境中的window
对象。相同的规则适用于全局范围内this
的值。所以在fn() == this)
中,this
也指向全局对象。但是,当在fn.call(object)
中的某个其他对象的上下文中调用它时,this
内的fn
会引用object
。
fn.call(object)
根本不会修改或分配任何内容object
。受影响的唯一因素是this
内fn
值仅在该调用期间。因此,即使在此次通话后,您仍会继续按常规方式拨打fn()
,而不是object.fn()
。
该示例仅演示函数内的this
值是动态的。