Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中保存对象变量的状态?_Javascript - Fatal编程技术网

如何在javascript中保存对象变量的状态?

如何在javascript中保存对象变量的状态?,javascript,Javascript,这是我的密码: var theObj = { localepath:false, settings:false, localeObj:false, callAjax: function(relative_path, callback){ var Ajax = new XMLHttpRequest(); var serialized = false; Ajax.onreadystatechange = functio

这是我的密码:

var theObj = {
    localepath:false,
    settings:false,
    localeObj:false,
    callAjax: function(relative_path, callback){
        var Ajax =  new XMLHttpRequest();
        var serialized = false;
        Ajax.onreadystatechange = function() {

            //Since what we are calling a local file. we cannot get a 200 OK Status.
            //So We check only the readystate
            if(Ajax.readyState==4){
                serialized = Ajax.responseText;
                callback(serialized);
            }

        }

        Ajax.open("GET",relative_path, true);
        Ajax.send();    
    },

    readSettings: function(callback){
        var data = this.callAjax('settings.json', function(data){
            this.settings = JSON.parse(data);
            callback(this.settings);
        });
    },

    readLocale: function(localepath, callback){
        var data = this.callAjax('locale/'+localepath+'.json', function(data){
            this.localeObj = JSON.parse(data);
            callback();
        });
    },

    writeContent: function(id, typeofElement, content){
        var currentElement = document.createElement(typeofElement);
        currentElement.setAttribute('id', id);
        currentElement.innerHTML = this.l10n(content);
        document.body.appendChild(currentElement);
    },

    l10n: function(content){
        var localeObject =  this.localeObj;
        alert(localeObject); //<< This will alert the  cause
        var arr = content.split(" ").reverse(); //Split by space. and reverse (actually non-reversed) the order
        var newArr =[]; //Container
        for (var i = arr.length - 1; i >= 0; i--) {
            // if the word does not have one-to-one mapping:
            if(localeObject[arr[i]] == undefined){
                if(isNaN(Number(arr[i]))){
                //^^ if the word is not a number
                newArr.push(arr[i]); //do not translate.
                } else { //if the word is collection of digits
                    var nums = arr[i].split('').reverse(); //Same old split and (non)-reverse
                    var convNums = []; //Same old container
                    for (var j = nums.length - 1; j >= 0; j--) {
                        convNums.push(localeObject[nums[j]]);
                        //iterate and push digits
                    }
                    newArr.push(convNums.join('')); //Make those digits a word! :)
                }
            } else { //This means the word has a one-to-one mapping:
                newArr.push(localeObject[arr[i]]);
            }
        }
        return newArr.join(" "); //Join all with spaces.
    },

    setLocalePath: function(path_to_locale){
        this.localepath = path_to_locale;
    },
    getLocaleDefault:function(settings){
        return settings.locale[settings.defaultLocale];
    }
};

它警告false两次,这意味着方法
theObj.readLocale()
没有将内容保存到
this.localeObj
?为什么会这样?我试着做
var newObj=newtheobj()不起作用。任何解决方法?

这种类型的问题是由于对
这个
关键字理解不足而导致的。这里的主要问题是方法的
localeObj
属性从未保存,因为
this
是从回调内部引用的,因此没有引用对象。可以做的一件事是:

.....
    readLocale: function(localepath, callback){
        var that = this; //Now `that` = `this` references the object
        var data = this.callAjax('locale/'+localepath+'.json', function(data){
            that.localeObj = JSON.parse(data);
            callback(); 
        });
    },
....

知道了。邪恶的“this”导致了这一点:)。
.....
    readLocale: function(localepath, callback){
        var that = this; //Now `that` = `this` references the object
        var data = this.callAjax('locale/'+localepath+'.json', function(data){
            that.localeObj = JSON.parse(data);
            callback(); 
        });
    },
....