也许我会发疯但这看起来像是一个基本的东西,我现在有一个基本的phonegap应用程序编译到黑莓但我希望能够在ripple模拟器中测试它,我的代码为清楚起见,此处进行了更改,但请查看以下内容......
index.html中的我有以下初始化代码。
function onLoad() {
if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
document.addEventListener("deviceready", onDeviceReady, false);
} else {
onDeviceReady();
}
}
function onDeviceReady() {
// Now safe to use the Cordova API
var program = new app2();
program.Login();
}
}
并在index.js中添加以下简单对象。
var app2 = function(){
this.Login = function() {
alert($("#project_list").html());
this.LoadContent();
}
this.LoadContent = function() {
alert($("#project_list").html());
}
}
现在只有一个字符串在project_list元素中说“test”,所以预期的输出应该是:
“测试”
“测试”
除了纹波仿真器外,它无处不在。纹波输出如下
“测试”
“未定义”
当我在对象中调用一个方法时,它似乎完全失去了DOM,我正在摸不着头脑。任何人都可以建议为什么会出现这种情况?
答案 0 :(得分:1)
将您的代码更改为
var app2 = function(){
var that=this;
this.Login = function() {
alert($("#project_list").html());
that.LoadContent();
}
this.LoadContent = function() {
alert($("#project_list").html());
}
}
只要您在javascript
写作,this
的含义就是this
的所有者。
在您的情况下,当您在this.LoadContent()
函数中撰写this.Login()
时,this
中this.Login()
的所有者是Login
的{{1}}属性: app2
。它不是app2.Login
。
为了解决这个问题,我们会app2
通过this
将app2
var that
变量存储在var that = this
中。因此变量that
将始终指向app2
。该所有者是app2
。
that
是app2
的成员变量。因此that
的所有其他成员变量都可以访问app2
,包括Login
。