这取自John Resig的Learning Advanced Javascript#25(学习高级Javascript#25),称为更改函数的上下文。
1)在fn() == this
行中,这指的是什么?它是在说此功能的函数中引用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."
最佳答案
call
是为Function
对象定义的函数。 call
的第一个参数是this
在调用的函数内部引用的对象。
当在没有任何特定上下文的情况下调用fn()
时,this
指的是全局上下文,或浏览器环境中的window
对象。全局范围中的this
值也适用相同的规则。因此,在fn() == this)
中,this
也指向全局对象。但是,当在其他对象的上下文中调用它时,例如fn.call(object)
,那么this
中的fn
就是object
。fn.call(object)
完全不会修改或为object
分配任何内容。唯一受影响的是仅在该调用期间,this
中的fn
值。因此,即使在此调用之后,您仍将继续以常规方式而不是fn()
调用object.fn()
。
该示例仅说明函数内部的this
值是动态的。
关于javascript - 在JavaScript中更改函数的上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5334611/