2014-03-06 67 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