Пространства имен JavaScript

#javascript #namespaces

#javascript #пространства имен

Вопрос:

Какой наилучший способ получить доступ к функции или свойству из одного пространства имен в другом в JavaScript? Пример:

 
var NS = {};  
NS.A = {  
    prop1: 'hello',
    prop2: 'there',
    func: function() {alert('boo');}  
};  

NS.B.C = {  

    func1: function() {
        // Here I want to access the properties and function from the namespace above
        alert( NS.A.prop1   NS.A.prop2 ); // ?
        NS.A.func(); // ?
    }

};

NS.B.C.func1();
  

Комментарии:

1. Хорошо, но должен ли я писать 100 раз NS.A для каждого свойства или функции, к которым я хочу получить доступ? Или мне лучше создать локальную переменную, указывающую на NS.A? На самом деле, я пробую второе, но тоже не нахожу его чистым.

2. Вам следует прочитать о закрытии javascript. Наличие локальной переменной внутри scoop, указывающей снаружи на NS. A определенно будет быстрее, чем ссылаться на переменную за пределами scoop.

Ответ №1:

Конечно, «пространство имен» в JavaScript — это просто глобальный объект, в котором хранится коллекция связанных функций и фрагментов данных (вместо множества глобальных значений, по одному для каждой функции и фрагмента данных).

Единственная причина, по которой ваш пример не будет работать, заключается в том, что NS.B не определено, когда вы пытаетесь присвоить ему C свойство.

Ответ №2:

NS.B.C вызывает ошибку … что-то вроде этого должно сработать для вас:

 NS.B = {
  C: {
    func1: function() {
        // Here I want to access the properties and function from the namespace above
        alert( NS.A.prop1   NS.A.prop2 ); // ?
        NS.A.func(); // ?
    }
  }
};
  

Смотрите http://jsbin.com/eweta5/2 например.