Я пишу некоторый код Javascript, используя jQuery для отображения специально отформатированных виджетов в браузере.Я добился успеха, но сейчас я работаю над рефакторингом своего кода по двум причинам.
(1) Я хочу иметь возможность легко использовать виджет более одного раза и иметь объект Javascript, ссылающийся на каждыйone.
(2) Я хочу сделать это правильно, чтобы мой код был полностью пригоден для повторного использования и не ограничивал глобальное пространство имен всеми видами объектов и функций.
У меняпроблема с областью видимости, и я хочу решить проблему и улучшить мое понимание области видимости Javascript.Я сжал эту проблему до крошечного фрагмента кода, который иллюстрирует, что я делаю:
function getMyObject() {
var theObject = {
doThis: function () { },
doThat: function () { },
combinations: {
doThisTwice: function () { doThis(); doThis(); },
doThatTwice: function () { doThat(); doThat(); }
}
};
return theObject;
}
var myObject = getMyObject();
myObject.combinations.doThisTwice();
Я объявил функцию, которая возвращает объект.
Однако, когда япопробуйте выполнить функцию combinations.doThisTwice()
, программа выдаст ошибку, сообщающую, что doThis()
находится вне области видимости.Как мне обратиться к функции doThis
в области действия combinations.doThisTwice
?
Обновление: Спасибо за ответ на мой вопрос: заменить doThis()
на theObject.doThis()
внутри функции doThisTwice()
.Это работает, но я не понимаю, почему.
Я бы подумал, что имя theObject
будет недействительным до конца объявления объекта.Я думаю, что я должен неправильно понять какой-то фундаментальный аспект Javascript ... возможно, из-за синтаксиса, подобного С.