Я только умеренно опытный 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 соответственно. Не знаете, почему массив не работает или почему весь объект не сохраняется. Я бы очень признателен за любые намеки.
Вы действительно думаете, что спрашивающий знает, как изменить контекст вызова, но задал простой вопрос об этом? – skarankevich
Очевидно, что автор хочет иметь доступ к указанным выше переменным. Нет больше :) – skarankevich
Спасибо! Я предположил, что к ним нужно обращаться через __data, поскольку console.log (x) не определен, но console.log (__ data.x) вернул значение. Мне все еще нужно выяснить, как работает контекст в отношении закрытия. –