2

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

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

我的尝试:

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链接

4

6 回答 6

8

试试这个方法

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/

于 2013-06-21T11:38:06.187 回答
1

这不会做你想要的..

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

定义了两个独立的函数。

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();

调用以键命名的函数。 小提琴

于 2013-06-21T11:41:04.363 回答
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();
于 2013-06-21T11:45:09.493 回答
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 添加对象,然后以这种方式发布...

于 2018-10-01T12:37:07.163 回答
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通话中添加引号。

于 2020-10-02T12:41:54.903 回答
-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);

所以答案:javascript 相当于 php call_user_func

于 2013-06-21T11:42:09.287 回答