【发布时间】:2023-03-31 18:41:01
【问题描述】:
有没有什么方法可以唯一标识一个函数而不给它一个 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]();
}
运行此代码时,只会触发一个警报,并且始终显示消息“2”。
【问题讨论】:
-
但是“expando”属性会使其工作吗?我不这么认为,你能发布一下你是怎么做到的吗?谢谢
-
@Victor - 我在下面为您的答案添加了评论。
标签: javascript