javascript:从string中调用对象中的方法

时间:2013-12-06 16:48:56

标签: javascript prototype

我正在尝试为我的应用制作一个控制器。我无法做我想做的事情,我不明白为什么:-(我不是一个javascript专家,所以我可能正在做一些不允许的事情。来自firebug的错误:

  

TypeError:window [(“Controller。”+ where)]不是函数

错误很明显,但为什么会发生这种情况?

jsFiddle: http://jsfiddle.net/TB8yr/1/

var Controller= function(){
    this.currentpage='home';

}

Controller.prototype.route=function(where){

    window["Controller."+where]();
};

Controller.prototype.goHome=function(){
    alert('route gohome');

}

Controller.prototype.goBack=function(){
    alert('route goback');

}

//////
test=new Controller();
test.route('goHome');

2 个答案:

答案 0 :(得分:4)

您应该使用this代替。

this[ where ]();

jsFiddle demo

答案 1 :(得分:2)

你有一些问题:

首先,jsFiddle在IIFE中运行其所有代码。在javascript部分中声明变量不会将其附加到页面的窗口对象。

其次,你不能用括号表示法通过点表示法来嵌套属性。例如。 ['parent']['child'],而非['parent.child']

最后,您尝试在构造函数上调用实例方法(goHome),而不是实例。您应该在原型方法中使用this来引用实例。

工作示例:http://jsfiddle.net/TB8yr/4/

var Controller= function(){
    this.currentpage='home';    
}

Controller.prototype.route=function(where){
    this[where]();
};

Controller.prototype.goHome=function(){
    alert('route gohome');    
}

Controller.prototype.goBack=function(){
    alert('route goback');    
}

test = new Controller();
test.route('goHome');