对象的方法上的addEventListener
addEventListener on a method of an object
我有一个多"页" phonegap应用程序,我试图正确地编写代码,所以我封装了整个第2页的代码在一个对象,如下所示。但是我观察到如果我把populateDB
, errorCB
和successCB
函数作为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;
};
}());
相关文章:
- 没有找到相关文章