如何在Javascript中调用不同对象之间的方法?

时间:2011-10-20 13:32:47

标签: javascript

我正在使用DHTMLX-touch框架开发移动设备应用程序,该框架基本上是javascript。

我有一个实现此功能的A类:

A.prototype.initEventHandler = function(controller) {
    $$('btn_submit').attachEvent('onItemClick', controller.switchView($$('ui_ewmon_main')));
}

首次实施

对象控制器是B类的实例,B类如下:

function B() {     
    //back button management
    this.last_view=new Array();
    this.current_view=this.ewmon_view.getRoot();

    this.switchView = function(next) {
        this.last_view[this.last_view.length]=this.current_view;
        this.current_view=next;
        next.show();
    }
}

使用firebug我收到此错误:

  

A.js:32Uncaught TypeError:Object#没有方法'switchView'

第二次实施

如果我尝试将switchView函数定义为原型函数:

function B() {     
    //back button management
    this.last_view=new Array();
    this.current_view=this.ewmon_view.getRoot();
}
B.prototype.switchView = function(next) {
    this.last_view[this.last_view.length]=this.current_view;
    this.current_view=next;
    next.show();
}

在这种情况下,我收到以下错误:

  

B.js:13 Uncaught TypeError:无法读取未定义的属性'length'

任何人都可以帮助我吗?

提前致谢 达尼洛

1 个答案:

答案 0 :(得分:3)

您通过attachEvent的回复致电controller.switchView($$('ui_ewmon_main')),以获得您认为想要的结果:

A.prototype.initEventHandler = function(controller) {
    $$('btn_submit').attachEvent('onItemClick', function(){ controller.switchView($$('ui_ewmon_main')); });
}

编辑:

查看您发布的代码,我希望会出现此错误。从this.current_view=this.ewmon_view.getRoot();行可以猜测this.current_view始终是EWmonView.prototype.getRoot返回的对象(r​​igth?),但此对象没有方法show

但是您致电controller.switchView($$('ui_ewmon_main'));导致this.current_view成为$$('ui_ewmon_main')的任何内容,在数组this.last_viewthis.current_view中保留不同的对象类型是错误。

脏修复将是:

if (this.current_view.show) {
    this.current_view.show();
} else{
    $$('ui_ewmon_main').show(); //or $$('ui_ewmon_login').show() can tell what you want =)
}

代替EWmonController中this.current_view.show();的出现位置。但是重新编写代码并让this.current_view始终使用相同类型的对象对我来说更好。