#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 например.