我正在尝试为我的应用制作一个控制器。我无法做我想做的事情,我不明白为什么:-(我不是一个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');
答案 0 :(得分:4)
答案 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');