Javascript:正确的闭包语法和格式

时间:2015-05-26 19:42:37

标签: javascript jquery

我对JS / jQuery只有中等的经验。我正在尝试解析从IIS检索到的XML对象,这里有一些粗略描述我问题的伪代码:

    //accepts an XML Object
    function dataFromAjax(object) {
        var x; // this is an int used to ID the object
        var y;
        var z;
        var arr = [];
        var __data = this;
        var xmlObject = object;

        function readDataFromXMLObject() {
           __data.x = $(xmlObject).find("X").text();
           __data.y = $(xmlObject).find("Y").text();
           __data.z = $(xmlObject).find("Z").text();

           testArr = $(xmlObject).find("TestArrInfo").text().split(",");

           if(testArr[0] != null)
              __data.arr.push(testArr[0]);
           // ...
        }

        function storeData() {
            sessionStorage.setItem(__data.x, JSON.stringify(__data));
        }

        readDataFromXMLObject();
        storeData();
    }

在控制台中,它在尝试解析arr []时给出了以下错误:

Uncaught TypeError: Cannot read property 'push' of undefined

当我尝试手动输入类似sessionStorage.getItem(123)(带引号和不带引号)的内容时,它也会返回null。

为了测试这些值,我尝试了console.log(xmlObject)console.log(__data.x)进行调试,这些工作正常并分别给了我XML对象和x值。不确定为什么数组不工作或整个对象为什么不保存。我非常感谢任何提示。

1 个答案:

答案 0 :(得分:2)

在此范围内,您可以直接访问arr

arr.push(testArr[0])

您的this上下文可能指向window个对象。 window.arr未定义。

了解JS中的this上下文:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this