2013-11-15 3 views
0

Я работаю над проектом, где у меня есть литерал корневого объекта, который хранит такие вещи, как константы и перечисления, используемые во всем остальном, и вложенные литералы объектов для разделения различных функций. Что-то вроде этого:цепочка доступа javascript с вложенными объектными литералами

root = { 
    enum : { 
     FIRSTVAL : 0, 
     SECONDVAL : 1, 
     THIRDVAL : 2, 
    }, 
    CONST : 0xFFE8, 
} 

root.display = { 
    renderer : function() { 
     // do something... 
     do_some_fun(enum.FIRSTVAL); 
    } 
    // other functions 
} 

root.engine = { 
    processor = function() { 
     // do some stuff 
     run_calculations(CONST); 
    } 
    // some other functions 
} 

В основном я использую объект верхнего уровня буквального как пространство имен, с другими объектами/функции разбросаны в нескольких файлах. Единственная проблема заключается в том, что свойства корневого объекта недоступны для корневых дочерних элементов, таких как перечисление в root.display.renderer или CONST в root.engine.processer. Если root был объектом функции, это было бы просто выполнить через цепочку прототипов, но я хочу, чтобы объект root был статическим и просто служил контейнером.

Каков наилучший способ выполнения этой структуры в Javascript? Есть ли лучшая структура, которую я могу использовать, которая выполняет ту же задачу инкапсуляции проекта?

Редактировать: Извините, я неправильно ссылался на наследование. Я знаю, что свойства root могут быть доступны напрямую (через root.whatever). Я хочу знать, возможно ли, чтобы эта ссылка на root была неявной внутри дочерних элементов root; если использование прямой ссылки не является стандартной практикой для Javascript?

+1

Почему не корневые свойства доступны из детей просто как '' root.enum', root.CONST' и т.д.? –

+0

может получить доступ к чему-либо из корня, я думаю, вы должны включить пример ребенка. – rab

+1

Это не похоже на наследование. –

ответ

3

Вы имеете в виду вот это ?? («Вар» не требуется, но приветствуется.)

var root = { 
    enum : { 
    FIRSTVAL : 0, 
    SECONDVAL : 1, 
    THIRDVAL : 2, 
    }, 
    CONST : 0xFFE8, 
} 

root.display = { 
    renderer : function() { 
     console.log(root.enum.FIRSTVAL); 
    } 
} 

root.engine = { 
    processor : function() { 
     console.log(root.CONST); 
    } 
} 
Смежные вопросы