这取自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/

10-14 08:49