Javascript 调用对象中定义的函数

Javascript 调用对象中定义的函数,javascript,Javascript,我有一个对象,它定义了在页面元素的单击事件中要调用的函数的名称和参数 object_array = [ { id: "id1", onclick: "load_file(filename.php);", }, { id: "id2", onclick: "open_url('http://url.com');", } ]; 必须动态检索这些信息。我希望在click事件中为数组中的给定对象调用onclick

我有一个对象,它定义了在页面元素的单击事件中要调用的函数的名称和参数

object_array = [
    {
       id: "id1",
       onclick: "load_file(filename.php);",
    },

    {
       id: "id2",
       onclick: "open_url('http://url.com');",
    }
];
必须动态检索这些信息。我希望在click事件中为数组中的给定对象调用onclick函数

$('element').click(function() {
      // call object.onclick
});

看来eval不是一个好的选择。有其他方法调用该函数吗?

您可以声明如下函数

onclick : function()
{
   action(arguments);
}

您可以声明一个函数,如

onclick : function()
{
   action(arguments);
}
下面是一个正在工作的JSFIDLE:

像这样:

 object_array = [
        {
           id: "id1",
           // Encapsulate in an anonymous function
           onclick: function(){ load_file('filename.php'); },
        },
        {
           id: "id2",
           // Encapsulate in an anonymous function
           onclick: function(){ open_url('http://url.com'); },
        }
    ];
然后像这样把它绑起来:

$('element').click(obj.onclick);
大概您会这样使用它::

object_array.forEach(function(obj){
     // Note there is no need to wrap the obj.onclick
     // into another anonymous function anymore!
     $("#" + obj.id).click(obj.onclick);
});
下面是一个正在工作的JSFIDLE:

以下是一个可行的JSFIDLE:

像这样:

 object_array = [
        {
           id: "id1",
           // Encapsulate in an anonymous function
           onclick: function(){ load_file('filename.php'); },
        },
        {
           id: "id2",
           // Encapsulate in an anonymous function
           onclick: function(){ open_url('http://url.com'); },
        }
    ];
然后像这样把它绑起来:

$('element').click(obj.onclick);
大概您会这样使用它::

object_array.forEach(function(obj){
     // Note there is no need to wrap the obj.onclick
     // into another anonymous function anymore!
     $("#" + obj.id).click(obj.onclick);
});
下面是一个正在工作的JSFIDLE:

您应该将对象数组重构为:

然后,您可以使用以下命令调用它:

var actions = {
    load_file: function(url) {
        ...
    },
    open_url: function(url) {
        ...
    },
    ...
};
object_array.forEach(function(ob) {
    $("#"+ob.id).click(function() {
        actions[ob.action](ob.url);
    });
});
如果有更复杂的参数,还可以提供一个arguments数组,而不是url,并在函数上使用

或者,如果您只需要函数的查找表,请使用:

var object = {
    "id1": function() {
        load_file('filename.php');
    },
    "id2": function() {
        open_url('http://url.com');
    }
};
$('element').click(function() {
    object[this.id]();
});
您应该重构对象数组以:

然后,您可以使用以下命令调用它:

var actions = {
    load_file: function(url) {
        ...
    },
    open_url: function(url) {
        ...
    },
    ...
};
object_array.forEach(function(ob) {
    $("#"+ob.id).click(function() {
        actions[ob.action](ob.url);
    });
});
如果有更复杂的参数,还可以提供一个arguments数组,而不是url,并在函数上使用

或者,如果您只需要函数的查找表,请使用:

var object = {
    "id1": function() {
        load_file('filename.php');
    },
    "id2": function() {
        open_url('http://url.com');
    }
};
$('element').click(function() {
    object[this.id]();
});

那么对象_数组是以JSON或类似格式从服务器检索的?或者它只是嵌入到代码中的一个文本?您对object_数组中的对象有控制权吗?换句话说,您能将onclick的格式更改为合理的格式吗?这样就可以用JSON或类似的格式从服务器检索object_数组了?或者它只是嵌入到代码中的一个文本?您对object_数组中的对象有控制权吗?换句话说,您能将onclick的格式更改为合理的格式吗?如果我在另一个函数中调用onclick,这是函数名{object.onclick;}吗?谢谢。如果您想调用它,那么可以像调用普通函数一样调用函数名{object.onclick;}:我的对象数组不喜欢对象中的匿名函数。它不喜欢onclick:function{load_file'filename.php';},@user823527我为您添加了一个jsfiddle链接。这在小提琴中确实有效。但是,当在click函数以外的函数中调用时,object.onclick不会完成。函数名{object.onclick;}实际上并没有运行load_file函数。如果我在另一个函数中调用onclick,这是函数名{object.onclick;}吗?谢谢。如果您想调用它,那么可以像调用普通函数一样调用函数名{object.onclick;}:我的对象数组不喜欢对象中的匿名函数。它不喜欢onclick:function{load_file'filename.php';},@user823527我为您添加了一个jsfiddle链接。这在小提琴中确实有效。但是,当在click函数以外的函数中调用时,object.onclick不会完成。函数名{object.onclick;}实际上并没有运行load_file函数。函数的查找表对我来说已经足够了。这对我来说是一个很好的解决方案。函数的查找表对我来说已经足够了。这对我来说是个好办法。