Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2016, 17:31
Новичок на форуме
Отправить личное сообщение для AndreyMG Посмотреть профиль Найти все сообщения от AndreyMG
 
Регистрация: 28.11.2015
Сообщений: 8

Константный массив, как приватное поле класса
Добрый день!

Имеется следующий блок кода:

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 плохо знаком, прошу не ругаться, сроки уж больно поджимают.

Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2016, 19:54
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от AndreyMG Посмотреть сообщение
внутри другой функции, которая является членом класса.
Как вы определили что она член класса?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
как сравнить сессию и то, что введено в поле Nailya Общие вопросы Javascript 20 17.06.2013 18:08
Как ввести в поле ввода значение где есть javascript MOZG Общие вопросы Javascript 8 19.04.2013 10:28
Как получить javasript массив из php? dima_tr AJAX и COMET 6 01.02.2013 03:37
Как отследить пропал ли текст placeholder-а при фокусе на поле ввода z1987 Общие вопросы Javascript 2 19.12.2012 11:10