gpt4 book ai didi

javascript - 存储对 `call` 函数的引用

转载 作者:行者123 更新时间:2023-11-30 08:43:22 25 4
gpt4 key购买 nike

今天早些时候我注意到了一些奇怪的事情。我似乎无法存储对函数的 call 属性的引用,然后执行它。示例:

var log = console.log;
log.call(console, 'This works');

var logCall = console.log.call;
logCall(console, 'This does not');

对我来说,这似乎是完全合法的 Javascript,但第二次调用总是给我这样的错误:undefined is not a function。随意玩弄它here ,你会得到相同的结果。

那么为什么 Javascript 会阻止我以这种方式调用 call

编辑:在阅读了 SimpleJ 的回答后,我终于明白了。因此,我将更新此内容,说明如何使上述内容起作用:

var log = console.log;
log.call(console, 'This works');

var logCall = console.log.call;
logCall.call(console.log, console, 'This works now too');

问题是 console.log 收到了正确的 this 值,但是 console.log.call 没有得到正确的值这个 值。如您所见,我基本上必须执行 console.log.call.call。显然你永远不会真正使用这样的代码,我只是好奇。

最佳答案

您需要保持与控制台的绑定(bind)。试试这个:

var logCall = console.log.call.bind(console.log);
// example: logCall(console, "foobar");

var log = console.log.bind(console);
// example: log("foobar");

对于 log 的绑定(bind)引用。

编辑:jsfiddle:http://jsfiddle.net/67mfQ/2/

关于javascript - 存储对 `call` 函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191701/

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