唯一识别JavaScript中的函数

mik*_*rey 5 javascript

有什么方法可以在不赋予expando属性的情况下唯一标识一个函数?我一直在使用“ toString()”来标识函数,但是当两个函数相同时,它们就会冲突。

下面的示例代码重现该问题。在我的实际代码中,关联数组“ myfunctions”的键也是从其他参数构建的。我不想生成无意义的密钥,因为使用此代码的开发人员需要能够在不持有对某些随机密钥的引用的情况下,随时重建此密钥。

var myfunctions = {};

(function(){
    var num = 1;
    function somefunc() {
        alert(num);
    }
    myfunctions[somefunc.toString()] = somefunc;
})();

(function(){
    var num = 2;
    function somefunc() {
        alert(num);
    }
    myfunctions[somefunc.toString()] = somefunc;
})();

for (var f in myfunctions) {
    myfunctions[f]();
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时,仅触发一个警报,并且始终显示消息“ 2”。

Ant*_*nes 2

答案是否定的,您无法从函数中提取任何可以与该特定实例关联的唯一字符串值。

为什么要避免使用 Expando?