gpt4 book ai didi

JavaScript .bind(this) 导致函数丢失名称属性 - bug/功能?

转载 作者:行者123 更新时间:2023-11-28 19:55:47 24 4
gpt4 key购买 nike

在我的 Node JS 应用程序中,我有一个回调,我必须将其范围限定为已实例化的函数,传统上我使用 .bind(this)注册回调。但是如果我在函数上有一个名称(这是必要的).name属性丢失,函数仅显示为 [Function]这是不正确的。

示例代码为:

{
let http = require('http');
let server = http.createServer();

function myRequestListener() {
console.log(this, this.name); // [Function], ''
}

server.on('request', myRequestListener.bind(myFakeClass));
server.listen(1811);
}

没有.bind(myFakeClass)我按预期得到了 name 属性。

要查看完整的代码库(我的现实世界问题)您可以查看代码 here @#38

这是 JS/V8 中的错误还是功能?我无法使用arguments.callee.caller.name因为我正在使用 Node JS 和谐功能,这意味着我严格运行整个过程。这会影响 Node 0.11.7 to 0.11.12 的版本

最佳答案

您没有记录函数的名称,而是记录上下文的名称,即 myFakeClass

当您使用 bind 构建新函数时,函数的名称会被复制,如以下简单代码所示(查看堆栈跟踪):

function a(){
throw "stack";
}
a.bind({}).call([]);

您还可以通过记录 arguments.callee.name 进行检查。

这是一个要测试的 fiddle :http://jsbin.com/nuresaru/1/edit

我检查过它在最新的 Chrome、Firefox 和 Node v0.10.26 上的工作情况相同。

<小时/>

编辑:在看到你的 fiddle 之后:请注意,你不能仅通过设置 name 属性来更改函数的名称。

关于JavaScript .bind(this) 导致函数丢失名称属性 - bug/功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605251/

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