gpt4 book ai didi

javascript - 为什么函数的调用成员不能赋值给变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:31:54 25 4
gpt4 key购买 nike

我正在为一个项目开发转码器,遇到了一个不寻常的边缘案例。

我有以下内容:

function a(func){
return func.call()
}

出于各种原因,转码器希望将其更改为:

function a(func){
var tmp = func.call;
var res = tmp()
return res;
}

但是,对 tmp() 的调用返回 tmp is not a function。如果我只通过这一行调试和暂停,tmp 被定义为一个函数。

它的签名是 function call(){ [native code]} 有什么关系吗?

是否有其他函数会触发类似的错误?

除了干脆不做之外,有没有办法解决这个问题?

编辑:我发现了另一种情况,看起来可能与对象的上下文有关:

a = { toString: null }.propertyIsEnumerable
a("toString")

抛出同样的错误。

编辑:一些上下文;我正在编写转码器,它有一个非常具体的用例,其中每一行代码都被分成最简单的组成部分。有可能我根本无法将它分开。使用上面的示例,func.call() 是一个成员访问操作,后跟一个调用表达式,我想将成员访问和调用表达式分成两个单独的表达式。

最佳答案

如果你想将一个方法存储在一个变量中,而不是做

 var f = obj.mymethod;
f();

你可以做到

 var f = obj.mymethod.bind(obj);
f();

关于javascript - 为什么函数的调用成员不能赋值给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950660/

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