0

这是代码示例:

var eventStack = {};
function addEvent (fn) {
  eventStack[fn] = fn;
}
function removeEvent (fn) {
  delete eventStack[fn];
}
addEvent(alert);
addEvent(console.log);
addEvent(addEvent);

它适用于我自己定义的任何功能,但不适用于 console.log。取而代之的是 _firebugignore。

我认为 toString 属性有一些魔力

编辑hmng,我只是再次运行我的代码,它对 console.log 工作正常,以前键和值都被替换购买“_firebuignore”,我想它的 higgs bugson

4

2 回答 2

1

是的,有一些魔力Function.prototype.toString:它依赖于实现,它只需要返回函数的表示形式,它是FunctionDeclaration -syntax-like。当然,它不能为所有那些环境内置函数(如console.log)返回一个 JS 函数。

但是,我认为通过字符串表示来识别函数根本不是一个好主意。很容易发生两个不同的函数最终出现在同一个字符串中(例如:两个相同的函数表达式,不同范围内的相同函数声明 - 或闭包,内置函数(Array.prototype.toString.toString() == Function.prototype.toString.toString())。

相反,请使用 ArrayeventStack并通过 . 检查函数是否存在indexOf()

于 2012-10-13T21:23:56.847 回答
0

属性名称只能是字符串。其他类型会根据需要强制转换为字符串值。当您迭代属性时,for ... in您会得到字符串。

于 2012-10-13T20:47:02.817 回答