2014-03-06 128 views
0

內的對象的方法我有我將對象添加到動態像陣列這樣訪問數組

var _plugins = []; 

this.registerPlugin = function(plugin){ 

    _plugins.push(plugin); 
    plugin.onInit() 
}, 

這是所有類中,我試圖用一個方法這樣它應該運行中通過的方法meth

this.runPluginMethod = function(meth, call_obj){ 
    for (x in _plugins){ 
     x[meth](call_obj) 
    } 
} 

我加入到_plugins陣列的對象是這樣

var ourPlugin = Object.create(babblevoicePlugin); 

Object.defineProperty(ourPlugin, 'onInit', {value : function() 
{ 
    console.log('this is from reflex oninit') 

}}); 
創建

當我嘗試運行時mianClass.runPluginMethod('onInit', 'a')它什麼都不做,不會運行console.log,因爲它應該在我的腦海裏。

任何人都可以幫忙嗎?難道我做錯了什麼?這可能嗎?

+0

嘗試調試。當你運行'this.runPluginMethod'時,什麼'x [meth]'評估? – akonsu

+0

我認爲你使用的是錯誤的,它應該是_plugins [x]像語法這樣的javascript foreach不能用作另一種語言 – Carlos487

+0

什麼是'this'?什麼是'mainClass'?如何發佈一個完整但最小的工作示例而不是一堆碎片? –

回答

1

我認爲這個問題是在這裏:

this.runPluginMethod = function(meth, call_obj){ 
    for (x in _plugins){ 
     x[meth](call_obj) 
    } 
} 

你試圖訪問一個關鍵的,而不是你要尋找的對象的屬性。改變它到下面應該工作。

this.runPluginMethod = function(meth, call_obj){ 
    for (x in _plugins){ 
     _plugins[x][meth](call_obj) 
    } 
} 

EDIT

作爲另一示例,檢查一個js控制檯下面的輸出:

x = ['a','b','c']; 
for (i in x){ console.log(i, x[i]) }; 
+0

謝謝你的迴應我已經改變了你的建議,我得到'TypeError:不能調用'null'的方法'日誌'它怎麼能找不到控制檯對象? – jbaldwin

+0

你在哪裏運行代碼? [並非所有瀏覽器都有console.log](https://developer.mozilla.org/en-US/docs/Web/API/console.log)。 – turtlemonvh

+0

我在Chrome中運行它 – jbaldwin