Константный массив, как приватное поле класса
Вложений: 2
Добрый день!
Имеется следующий блок кода: function TRANSLATOR() { this.source; this.m_Operands = []; this.m_Commands = []; this.m_SupportedFunctions = []; // некий блок кода } Далее происходит инициализация массива m_SupportedFunctions TRANSLATOR.prototype.Initialize = function (sourceCode) { this.m_SupportedFunctions.push(new FUNCTION("AddP", 1)); this.m_SupportedFunctions.push(new FUNCTION("DedP", 2)); this.m_SupportedFunctions.push(new FUNCTION("MulP", 3)); this.m_SupportedFunctions.push(new FUNCTION("DivP", 4)); this.m_SupportedFunctions.push(new FUNCTION("AddC", 5)); this.m_SupportedFunctions.push(new FUNCTION("DedC", 6)); this.m_SupportedFunctions.push(new FUNCTION("MulC", 7)); this.m_SupportedFunctions.push(new FUNCTION("DivC", 8)); this.m_SupportedFunctions.push(new FUNCTION("Send", 10)); this.m_SupportedFunctions.push(new FUNCTION("SendS", 11)); this.m_SupportedFunctions.push(new FUNCTION("Go", 12)); this.m_SupportedFunctions.push(new FUNCTION("GoIf", 13)); this.m_SupportedFunctions.push(new FUNCTION("RC", 20)); this.m_SupportedFunctions.push(new FUNCTION("RP", 21)); this.m_SupportedFunctions.push(new FUNCTION("WrC", 30)); this.m_SupportedFunctions.push(new FUNCTION("WrP", 31)); this.m_SupportedFunctions.push(new FUNCTION("Stop", 0)); // некий блок кода } Состояние m_SupportedFunctions после выполнения блока кода выше в функции Initialize: Вложение 3166 Т.е. по скриншоту видно что переменная инициализирована правильно. Создаётся с помощью: function FUNCTION(name, code) { this.name = name; this.code = code; } Теперь собственно вопрос: Почему массив m_SupportedFunctions виден только в пределах функции Initialize? По аналогу с языком С++ переменная как-будто локальная. На скриншоте 1 показана состояние переменной внутри функции Initialize, а на скриншоте 2 показано состояние внутри другой функции, которая является членом класса. function GetCommandCode(command) { var code = -1; var length = this.m_SupportedFunctions.length; for(var i = 0; i < length; i++) { if(this.m_SupportedFunctions[i].name == command) { code = this.m_SupportedFunctions[i].code; } } return code; } Состояние m_SupportedFunctions после выполнения блока кода выше в функции GetCommandCode: Вложение 3167 Как только сейчас я понял возможно функция GetCommandCode просто не относится каким-то образом к объекту TRANSLATOR из-за того что я не указал конструкцию типа TRANSLATOR.prototype. при объявлении функции? В общем сама суть вопроса ещё раз, если вдруг не понятно. Как объявить массив, который будет являться членом класса TRANSLATOR, при этом (желательно) необходимо чтобы он был константным (недоступен для изменения), а так же как сделать что бы все функции с объявлением function ...() могли обратиться к данной переменной. С языком javascript плохо знаком, прошу не ругаться, сроки уж больно поджимают. Спасибо! |
Часовой пояс GMT +3, время: 20:33. |