带有变量范围的Javascript OOP问题

时间:2013-05-03 19:28:33

标签: javascript oop scope

我正在使用alert()进行测试,但是我的对象在我的for循环中更改之后无法提示我的变量的正确值。我想使用构造函数将值存储在对象中,但只存储我在开头设置的空值。

//declare the variables I'm going to use inside of my database query and for loop. 

$(function(){
    var uID =  JSON.parse(localStorage.getItem( 'uID' ));
    var hood = ' ';
    var gender = ' ';
    var birthday = ' ';
    var zip = ' ';
    Parse.initialize("ivHLAO7z9ml1bBglUN*******yCgKM2x","gNeGt04lU7xce*****BsIBSCVj");

$("#mainDiv").on('click', '.interested', function(){
    //on click, use "uID" variable to query the parse database to get birthday, gender, neighborhood, and zip
    var query = new Parse.Query(Parse.User);
    query.equalTo("uID",uID);
    query.find({
        success: function(results) {
            for(i = 0; i < results.length; i++){
                //this is where the variable values declared at the beginning are supposed to be changed to the results of the query 
                hood = results[i].get("neighborhood");
                gender = results[i].get("gender");
                birthday = results[i].get("birthday");
                zip = results[i].get("zipCode");
            }
        }//closes success
    })//closes find 

    //my object constructor 

    function interested(neighborhood,sex, bDay, zipCode) {
        this.hood = neighborhood;
        this.gender = sex;
        this.birthday = bDay;
        this.zip = zipCode; 
    }
    var intrstd = new interested(hood, gender, birthday,zip);

    alert(intrstd.hood); 
    alert(intrstd.gender); 
    alert(intrstd.birthday); 
    alert(intrstd.zip); 
});//closes on

1 个答案:

答案 0 :(得分:3)

如果查询是异步的,则在这些变量更改之前构造对象。将警报移至正确范围:

  //declare the variables I'm going to use inside of my database query and for loop. 
$(function () {
    var uID = JSON.parse(localStorage.getItem('uID'));
    var hood = ' ';
    var gender = ' ';
    var birthday = ' ';
    var zip = ' ';
    Parse.initialize("ivHLAO7z9ml1bBglUN*******yCgKM2x", "gNeGt04lU7xce*****BsIBSCVj");

    $("#mainDiv").on('click', '.interested', function () {

        //on click, use "uID" variable to query the parse database to get birthday, gender, neighborhood, and zip

        var query = new Parse.Query(Parse.User);
        query.equalTo("uID", uID);

        //my object constructor 
        function interested(neighborhood, sex, bDay, zipCode) {
            this.hood = neighborhood;
            this.gender = sex;
            this.birthday = bDay;
            this.zip = zipCode;
        }

        query.find({
            success: function (results) {

                for (i = 0; i < results.length; i++) {

                    //this is where the variable values declared at the beginning are supposed to be changed to the results of the query 

                    hood = results[i].get("neighborhood");
                    gender = results[i].get("gender");
                    birthday = results[i].get("birthday");
                    zip = results[i].get("zipCode");
                }

                var intrstd = new interested(hood, gender, birthday, zip);

                alert(intrstd.hood);
                alert(intrstd.gender);
                alert(intrstd.birthday);
                alert(intrstd.zip);

            } //closes success
        }) //closes find 

    }); //closes on

});