对象的方法上的addEventListener

addEventListener on a method of an object

本文关键字:addEventListener 方法 对象      更新时间:2023-09-26

我有一个多"页" phonegap应用程序,我试图正确地编写代码,所以我封装了整个第2页的代码在一个对象,如下所示。但是我观察到如果我把populateDB, errorCBsuccessCB函数作为page2_Obj的方法,saveData找不到它们。如果我把这些函数作为saveData本身的成员,一切都没问题。我的问题是:

1. 为什么saveData看不到它的兄弟?
2. 把这些函数作为saveData的成员是否正确,或者有更好的方法来做到这一点?
3.通过将这些函数作为saveData的成员,我是否泄漏了内存?

function page2_Obj() {
    this.bindEvents = function() {
        var obj = document.getElementById('savebtn');
        obj.addEventListener('click', this.saveData, false);
    this.unbindEvents = function() { /* blah */ }
    this.populateDB = function(tx) {
        /* blah */
    }
    this.errorCB = function(err) {
       alert("Error: "+err.code+ ' '+err.message);
    }
    this.successCB = function() {
       alert("success!");
    }
    this.saveData = function(){
        var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
        db.transaction(this.populateDB, this.errorCB, this.successCB);
    }
}

谢谢

快速回答您的问题:1. 停止使用THIS,将方法绑定到GLOBAL对象,这是个坏主意。2. 我认为您应该将模块模式视为一种更好的方式(我的回答结束)3.我不这么认为。

我不知道你想做什么,尽管我相信你的问题来自于"this"的使用。

是否使用Page2_Obj作为构造函数?(例如,创建如下实例:

var pagex = new Page2_obj();

?如果没有,就将所有这些内部方法绑定到GLOBAL对象,这是个坏主意。我也怀疑这是不是你想做的。

你能解释一下你想要达到的目标吗?如果它是封装的,那么IIFE更适合:

   var Page2_obj = (function() {
      // some private data
      var a = 'private string';
      // create some private methods
      function imPrivate() {
       // do something
      }
      // reveal public API (methods)
      return {
        imPrivate: imPrivate;
      };
    }());
相关文章:
  • 没有找到相关文章