gpt4 book ai didi

javascript - 使用 Function.prototype.apply 设置 javascript 回调范围

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

每次我在 JavaScript 中声明回调时都必须手动设置对象的范围,这很令人沮丧,但这是生活中的事实。我想知道是否可以通过传递 [mycallback].apply 作为回调,并将范围对象作为参数来实现,如下所示:

var f = function() { console.log(this.x); };
var o = {x: 3};
setTimeout(f.apply, 1000, o);

据我所知,这应该以 o 作为范围调用 f,但 Chrome 却给我“未捕获的类型错误:在 [object DOMWindow] 上调用了 Function.prototype.apply,它是一个对象而不是一个函数”。为什么这行不通?

最佳答案

出于同样的原因,您首先需要“设置范围”。只有 apply 函数被发送到 setTimeout,它与函数 f 的关联丢失。因此,Javascript 将全局对象 window 分配给 this,就像在任何其他情况下一样。

有趣的是,apply 虽然是一个原生函数,但在某些方面并不特殊或神奇,并且在 的设置中以与用户定义的函数一致的方式运行>这个变量。

关于javascript - 使用 Function.prototype.apply 设置 javascript 回调范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427118/

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