gpt4 book ai didi

javascript - 在 JavaScript 中更改函数的上下文

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:39 26 4
gpt4 key购买 nike

这取自 John Resig 的 Learning Advanced Javascript #25,称为更改函数的上下文。

1) fn() == this 行中的 this 指的是什么?它是指函数内部的 this 吗?

2) 虽然我理解最后一行的目的(将函数附加到特定对象),但我不明白代码是如何做到这一点的。 “调用”这个词是预定义的 JavaScript 函数吗?请用通俗易懂的语言解释“fn.call(object)”,并明确告诉我括号 (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) 中,则 fn 中的 this 指的是对象

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

该示例简单地演示了函数中的 this 值是动态的。

关于javascript - 在 JavaScript 中更改函数的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5334611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com