从我的对象迭代,我试图调用函数并发送数据作为参数,在我的尝试,我收到错误..
使用对象键调用函数的正确方法是什么??
我的尝试:
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
答案 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)
如果你的变量范围是全局的,你可以使用它但不是最好的方法:
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);