我有一个多“页面”的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);
}
}
感谢
答案 0 :(得分:0)
快速回答您的问题: 1.停止使用这个,你的方法绑定到GLOBAL对象,坏主意。 2.我认为你应该把模块模式看作更好的方法(我的答案结束) 我不这么认为。
我不确定你要做什么,不过我相信你的问题来自使用"这个"。
您使用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;
};
}());