这取自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."
Run Code Online (Sandbox Code Playgroud)
call是为Function对象定义的函数.第一个参数call是this引用被调用函数内部的对象.
在fn()没有任何特定上下文的情况下调用时,this指的是全局上下文或window浏览器环境中的对象.相同的规则适用this于全局范围的值.所以在fn() == this),也this指的是全局对象.但是,当它在某些其他对象的上下文中调用时,如在内部fn.call(object),则指向this内部.fnobject
fn.call(object)不会修改或分配任何东西object.唯一受影响的是this内部的值fn仅在该调用的持续时间内.因此,即使在此次通话之后,您仍会继续fn()按常规方式呼叫,而不是object.fn().
该示例仅演示this函数内部的值是动态的.
| 归档时间: |
|
| 查看次数: |
2457 次 |
| 最近记录: |