Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Константный массив, как приватное поле класса (https://javascript.ru/forum/misc/63040-konstantnyjj-massiv-kak-privatnoe-pole-klassa.html)

AndreyMG 13.05.2016 17:31

Константный массив, как приватное поле класса
 
Вложений: 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.