2013-06-21 34 views
0

從我的對象迭代中,我試圖調用函數併發送數據作爲參數,在我的嘗試中,我得到錯誤..如何使用對象的鍵調用函數..?

什麼是使用對象鍵調用函數的正確方法..?

我嘗試:

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

回答

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/

+0

是的,理解。我們不能直接調用常規函數嗎?如果是的話爲什麼..? – 3gwebtrain

+0

因爲您無法通過名稱訪問簡單變量。括號表示法僅適用於對象的屬性。 – Bergi

+0

你可以聲明你的函數'x'和'y'作爲全局對象的屬性(聲明它沒有'var'),但是很糟糕 –

0

這不會做wha你想要..

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

+0

你期望'self'是什麼?全球範圍,「未定義」? – Bergi

+0

如果你在全局對象空間內,你現在處於 – Stefan

+0

的功能,它是全局對象空間,如果你在一個函數中,函數 – Stefan

-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

+0

以上解決方案來自本機JavaScript及其在所有瀏覽器中的工作。證明是http://phpjs.org/functions/call_user_func_array/ –

+0

是的。只有它不回答這個問題。 – Bergi

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(); 
相關問題