2015-05-26 3 views
0

Я только умеренно опытный JS/jQuery. Я пытаюсь разобрать объект XML, который я извлеченный из IIS, вот некоторые псевдокод, что примерно описывает мою проблему:Javascript: Правильный синтаксис закрытия и форматирование

//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(); 
    } 

В консоли это дает мне следующую ошибку при попытке разобрать обр []:

Uncaught TypeError: Cannot read property 'push' of undefined

Когда я пытаюсь вручную набрать что-то вроде sessionStorage.getItem(123) (с кавычками и без него), он также возвращает null.

Чтобы проверить значения, я попробовал как console.log(xmlObject), так и console.log(__data.x) для отладки, те отлично работали и дали мне объект XML и значение x соответственно. Не знаете, почему массив не работает или почему весь объект не сохраняется. Я бы очень признателен за любые намеки.

ответ

2

В этой области вы можете получить доступ к arr непосредственно:

arr.push(testArr[0]) 

Ваш this контекст, вероятно, указывает на window объекта. window.arr не определено.

Читайте о this контекст в JS: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

+0

Вы действительно думаете, что спрашивающий знает, как изменить контекст вызова, но задал простой вопрос об этом? – skarankevich

+0

Очевидно, что автор хочет иметь доступ к указанным выше переменным. Нет больше :) – skarankevich

+0

Спасибо! Я предположил, что к ним нужно обращаться через __data, поскольку console.log (x) не определен, но console.log (__ data.x) вернул значение. Мне все еще нужно выяснить, как работает контекст в отношении закрытия. –

Смежные вопросы