在JavaScript中更改函数的上下文

这取自John Resig的Learning Advanced Javascript#25,称为更改函数的上下文.

1)在行fn()==这是什么意思?它是指在函数里面说它返回这个吗?

2)虽然我理解了最后一行的目的(将函数附加到特定对象),但我不明白代码是如何做到的. “call”这个词是预定义的JavaScript函数吗?用简单的语言,请解释“fn.call(object)”,并明确告诉我parens(object)中的对象是否与var对象是同一个对象.

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."
call是为Function对象定义的函数.要调用的第一个参数是在被调用的函数内引用的对象.

在没有任何特定上下文的情况下调用fn()时,这指的是全局上下文或浏览器环境中的窗口对象.相同的规则适用于全局范围中的值.所以在fn()== this)中,这也指的是全局对象.但是,当在某个其他对象的上下文中调用它时,如在fn.call(object)中,那么这个fn内部就是指对象.

fn.call(object)根本不修改或赋予对象任何东西.唯一受影响的是fn中的这个值仅在该调用的持续时间内.因此,即使在此调用之后,您仍将继续调用fn()作为常规调用,而不是object.fn().

该示例仅演示函数内的此值是动态的.

相关文章
相关标签/搜索