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