如何使用Object的Key调用函数..?

时间:2013-06-21 11:33:08

标签: javascript jquery function object

从我的对象迭代,我试图调用函数并发送数据作为参数,在我的尝试,我收到错误..

使用对象键调用函数的正确方法是什么??

我的尝试:

var x = function(msg){
    console.log(msg);
}
var y = function(msg){
    console.log(msg);
}

    var obj = {x:"i am x", y:"i am y"}

    var all = function(){
        $.each(obj,function(key,value){
           [key](value);
        })
    }

    all();

任何一个数字你正确的方法请... 这是jsfiddle link

6 个答案:

答案 0 :(得分:5)

试试这种方式

var funcs = {
    x: function(msg){
        console.log(msg);
    },
    y: function(msg){
        console.log(msg);
    }
};

var obj = {x:"i am x", y:"i am y"}

var all = function(){
    $.each(obj,function(key,value){
       funcs[key](value);
    })
}

all();

这是你的小提琴http://jsfiddle.net/9XqeJ/1/

答案 1 :(得分:1)

这不会做你想要的......

var x = function(msg){
    console.log(msg);
}
var y = function(msg){
    console.log(msg);
}

定义了两个indpendetn函数。

var obj = {x:"i am x", y:"i am y"}

使用键'x'和'y'定义一个对象。它们完全独立于您定义的函数。

你可以这样做:

var self = this;
this.x = function(msg){
    console.log(msg);
}
this.y = function(msg){
    console.log(msg);
}

var obj = {x:"i am x", y:"i am y"}

var all = function(){
    $.each(obj,function(key,value){
        self[key](value);
    })
}

all();

调用以密钥命名的函数。 的 Fiddle

答案 2 :(得分:0)

如果你的变量范围是全局的,你可以使用它但不是最好的方法:

http://jsfiddle.net/PWtEG/

 x = function (msg) {
     console.log(msg);
 }
 y = function (msg) {
     console.log(msg);
 }

 var obj = {
     x: "i am x",
     y: "i am y"
 }

 var all = function () {
     $.each(obj, function (key, value) {
         window[key](value);
     })
 }

 all();

答案 3 :(得分:0)

var objF = {
    set setO(v) {
        for (var k in v) {
            objF[k](v[k]) // or this[k](v[k]) or add to internal objF object/var/array
        }
    },
    x: function(msg) {
        console.log(msg)
    },
    y: function(msg) {
        console.log(msg)
    }
}
objF.setO = {x:"i am x", y:"i am y"}

还可以添加带有set / get的对象,然后以这种方式发布,如果您以后想使用它们...

答案 4 :(得分:0)

您可以使用jQuery函数jQuery.globalEval

var x = function(msg){
    console.log(msg);
}
var y = function(msg){
    console.log(msg);
}

var obj = {x:"i am x", y:"i am y"}

var all = function(){
  $.each(obj,function(key,value){
    jQuery.globalEval(`${key}("${value}")`)
  })
}

all();

"${value}"表达式包含引号以形成字符串。对于其他值,它应该不带引号,否则函数会将所有内容作为字符串获取。您需要添加对值类型的检查,例如typeof value,并决定是否在jQuery.globalEval调用中添加引号。

答案 5 :(得分:-1)

这里是实现

的代码
var key = "foo";
obj[key](1, 2, 3);
obj[key].call(obj, 1, 2, 3);
obj[key].apply(obj, [1, 2, 3]);

function foo() { console.log(arguments); }

// 1. directly
foo(1, 2, 3);

// 2. trough Function.call()
foo.call(this, 1, 2, 3);

// 3. trough Function.apply()
var args = [1, 2, 3];
foo.apply(this, args);

SO答案:javascript equivalent of php call_user_func