Добрый день!
Имеется следующий блок кода:
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:
1.jpg
Т.е. по скриншоту видно что переменная инициализирована правильно.
Создаётся с помощью:
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:
2.PNG
Как только сейчас я понял возможно функция GetCommandCode просто не относится каким-то образом к объекту TRANSLATOR из-за того что я не указал конструкцию типа TRANSLATOR.prototype. при объявлении функции?
В общем сама суть вопроса ещё раз, если вдруг не понятно. Как объявить массив, который будет являться членом класса TRANSLATOR, при этом (желательно) необходимо чтобы он был константным (недоступен для изменения), а так же как сделать что бы все функции с объявлением function ...() могли обратиться к данной переменной.
С языком javascript плохо знаком, прошу не ругаться, сроки уж больно поджимают.
Спасибо!