在JavaScript中更改函数的上下文

在JavaScript中更改函数的上下文,javascript,Javascript,这篇文章摘自John Resig的学习高级Javascript 25,名为更改函数的上下文 1) 这是指什么?它是指函数中表示返回的this吗 2) 虽然我理解最后一行的目的(将函数附加到特定对象),但我不理解代码是如何做到这一点的。“call”一词是预定义的JavaScript函数吗?请用通俗易懂的语言解释“fn.call(object)”,并明确告诉我parens(object)中的对象是否与var对象相同 3) 。将函数分配给对象后,是否通过编写object.fn()调用该函数 var o

这篇文章摘自John Resig的学习高级Javascript 25,名为更改函数的上下文

1) 这是指什么?它是指函数中表示返回的this吗

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
的第一个参数是
this
在被调用函数中引用的对象

当在没有任何特定上下文的情况下调用
fn()
时,
引用全局上下文,或浏览器环境中的
窗口
对象。同样的规则适用于全局范围内的
this
的值。因此在
fn()==this)
中,
this
也指全局对象。但是,当在其他对象的上下文中调用它时,如在
fn.call(object)
中,则
fn
中指的是
对象

fn.call(object)
根本不修改或分配任何内容给
object
。唯一受影响的是
fn中的
this
值,该值仅在该调用期间有效。因此,即使在这次调用之后,您仍将继续按常规调用
fn()
,而不是按
object.fn()
调用


该示例仅说明函数中的
值是动态的。

关于答案中的第一段(即调用和对象),是始终如此,还是仅此特定代码?非常感谢您的帮助。当使用
call
apply
调用函数时,第一个参数将始终确定该函数中的
值。情况总是这样