4

也许我快疯了,但这似乎是一个基本的东西,我现在有一个基本的phonegap应用程序编译到黑莓,但我希望能够在波纹模拟器中测试它,我的代码在这里被改变为清楚起见,但请查看以下内容...

在 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,我对此挠头。谁能建议为什么会这样?

4

1 回答 1

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就是owner of that this。在您的情况下,当您this.LoadContent()this.Login()函数中编写时, thisin的所有者是:this.Login()Login属性。它不是。app2app2.Loginapp2

所以为了解决这个问题,我们将通过 do 来存储in的this变量。所以变量总是指向. 的所有者是。app2var thatvar that = thisthatapp2app2

that是 的成员变量app2。因此include 的所有其他成员变量都that可以访问。app2Login

于 2013-02-10T15:39:11.543 回答