如何调用document.addEventListener()中的类函数

krr*_*r25 3 javascript prototype event-handling javascript-events

当我加载页面时,我调用"addEventListener"来初始化"deviceReady",在addEventListener中,我想调用类中的函数.请参阅以下示例.

示例类

var HomePageModel = function(){

    this.initModule = function(){
    //doing some process;
    };
};
Run Code Online (Sandbox Code Playgroud)

我想在addEventListener中调用上面的initModule函数.

喜欢

document.addEventListener("deviceready", HomePageModel.initModule, false);
Run Code Online (Sandbox Code Playgroud)

是否可以在一个类外的eventlistener中调用类函数?

bfa*_*tto 6

您首先需要一个实例:

document.addEventListener("deviceready", new HomePageModel().initModule, false);
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的initModule方法使用this,它将无法工作,因为this将设置为触发事件的元素.为避免这种情况,您可以创建一个绑定到固定值的新函数this:

var model = new HomePageModel();
var boundFn = model.initModule.bind(model);
document.addEventListener("deviceready", boundFn, false);
Run Code Online (Sandbox Code Playgroud)

最后,您始终可以使用包装器函数作为事件处理程序,并从那里调用模块初始化程序(不确定为什么您没有考虑过):

document.addEventListener("deviceready", function(){
    new HomePageModel().initModule();
}, false);
Run Code Online (Sandbox Code Playgroud)