首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储对“调用”函数的引用

存储对“调用”函数的引用
EN

Stack Overflow用户
提问于 2014-06-12 18:42:46
回答 2查看 279关注 0票数 1

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

代码语言:javascript
运行
复制
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。您可以随意使用它,这里,您将得到同样的结果。

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

编辑:读完SimpleJ的答案后,我终于把它记在脑子里了。因此,我将通过如何让上面的内容起作用来更新它:

代码语言:javascript
运行
复制
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没有得到正确的this值。因此,正如您所看到的,我基本上必须执行console.log.call.call。很明显,你永远不会像这样使用代码,我只是好奇。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-12 18:49:13

您需要保持绑定到控制台。试试这个:

代码语言:javascript
运行
复制
var logCall = console.log.call.bind(console.log);
// example: logCall(console, "foobar");

代码语言:javascript
运行
复制
var log = console.log.bind(console);
// example: log("foobar");

有关绑定到log的引用。

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

票数 3
EN

Stack Overflow用户

发布于 2014-06-12 18:53:08

这是我在JavaScript中最喜欢的代码:

代码语言:javascript
运行
复制
var bind = Function.bind;
var call = Function.call;

var bindable = bind.bind(bind);
var callable = bindable(call);

您可以使用bindable函数获取对f.bind的引用。类似地,您可以使用callable函数获取对f.call的引用,如下所示:

代码语言:javascript
运行
复制
var log = callable(console.log, console);

现在,您所需要做的就是像任何其他函数一样调用log函数:

代码语言:javascript
运行
复制
log("Hello World!");

都是这样的人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24191701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档