在JavaScript中更改函数的上下文

时间:2011-03-17 03:37:30

标签: javascript

这取自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."

1 个答案:

答案 0 :(得分:7)

call是为Function对象定义的函数。 call的第一个参数是this在被调用函数内引用的对象。

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

fn.call(object)根本不会修改或分配任何内容object。受影响的唯一因素是thisfn值仅在该调用期间。因此,即使在此次通话后,您仍会继续按常规方式拨打fn(),而不是object.fn()

该示例仅演示函数内的this值是动态的。