如何在JavaScript中使用括号符号将函数附加到对象?

如何在JavaScript中使用括号符号将函数附加到对象?,javascript,function,object,Javascript,Function,Object,我正在编写一个javascript,它应该将上下文菜单附加到文档中的元素。上下文菜单的jquery插件需要上下文菜单的id和选项对象。options对象有一个名为bindings的属性,该属性应具有键/值对,其中键是菜单项的id,值是单击时调用的函数 问题是,我尝试填充的bindings对象在使用括号概念时没有将函数作为值附加,我需要它,因为菜单项的id不能预先确定 var bindings = {}; var bindingsFunction = function(t){

我正在编写一个javascript,它应该将上下文菜单附加到文档中的元素。上下文菜单的jquery插件需要上下文菜单的id和选项对象。options对象有一个名为bindings的属性,该属性应具有键/值对,其中键是菜单项的id,值是单击时调用的函数

问题是,我尝试填充的bindings对象在使用括号概念时没有将函数作为值附加,我需要它,因为菜单项的id不能预先确定

    var bindings = {};

    var bindingsFunction = function(t){
        alert('Trigger was ' + t.id + '\nAction was Open');
    };

    var $listItems = $contextMenu.find('li');

    $listItems.each(function(index, item){
        var key = '' + item.id;
        bindings[key] = bindingsFunction;
    });

    console.log('bindings is empty', bindings); 

    var result = $icon.contextMenu(contextMenuId, {
        bindings: bindings
    });

您没有包括脚本正在处理的HTML,但我猜正在选择的
li
元素没有
id
属性。因此,当您将
item.id
分配给
key
时,它是一个空字符串,因此不是有效的属性名称

如果在每个
li
上添加
id
,它应该可以正常工作:

这可能只是Firebug的“buggy”(?)显示。例如:

var mytest = {};

var foo = function() {
};

mytest['foo'] = foo;

console.log(mytest);
将显示:

Object { }

看起来像是一个空对象,但如果你点击它,你会看到内容。

它在Chrome中工作,所以我记得我正在使用Firefox4测试版,所以我刚刚重新启动Firefox,它神奇地工作了。如果我能再次复制它,我将能够提供更多细节。

我确实单击了,但没有显示,有趣的是,我重新启动了Firefox,它神奇地工作了。只有当我能再次复制它时才行。@Azder:有趣的是,我经常有这种行为。是的,我从脚本中删除的console.log确实显示了id,并且绑定[id]=id也起作用。空字符串是一个完全有效的属性名,不能用点符号访问它。