Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以将函数用作对象属性名吗?_Javascript_Function - Fatal编程技术网

Javascript 可以将函数用作对象属性名吗?

Javascript 可以将函数用作对象属性名吗?,javascript,function,Javascript,Function,下面是代码示例: var eventStack = {}; function addEvent (fn) { eventStack[fn] = fn; } function removeEvent (fn) { delete eventStack[fn]; } addEvent(alert); addEvent(console.log); addEvent(addEvent); 它可以运行我自己定义的任何函数,但对console.log不起作用。取而代之的是_firebugignore

下面是代码示例:

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属性有一些魔力


EDIThmng,我刚刚再次运行了我的代码,它在console.log上运行得很好,上一次键和值都被替换为buy“\u firebuignore”,我想它的higgs bugson属性名只能是字符串。其他类型根据需要强制为字符串值。当您使用
对属性进行迭代时。。。在
中,您可以得到字符串。

是的,它有一些神奇之处:它依赖于实现,只需要返回一个与语法类似的函数表示。当然,它不能为所有这些环境内置函数返回JS函数(比如
console.log

然而,我认为通过函数的字符串表示来识别函数并不是一个好主意。两个不同的函数很容易在同一个字符串中结束(例如:两个相同的函数表达式、不同作用域中的相同函数声明或闭包、内置函数(
Array.prototype.toString.toString()==function.prototype.toString.toString()


相反,当我发出
alert(eventStack[console.log])时,使用数组作为
eventStack
并通过Chrome中的
indexOf()

检查函数是否存在;
我得到了预期的
function log(){[native code]}
。没有问题。console.log、
removeEvent
到底什么不起作用?是的,
toString
应用于内置函数,如
console.log
,取决于实现。您期望什么?我不确定这是否能解决您遇到的问题,尽管我不确定您是否真的有问题,但是为什么不使用函数名作为键()然后该值可以作为对函数的引用。@ianpgall:这可能会导致更多问题,因为现在的大多数函数都是declaredexpressed anonymous-它们的名称是空字符串,并且它们会相互覆盖。@Bergi True,我没有考虑过匿名函数。但它可以用于普通函数声明吗?