有什么方法可以唯一地标识一个函数而不给它一个 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?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)