NameSpaces в Javascript - Использование его для двух разных файлов JS - PullRequest
0 голосов
/ 13 июля 2011

У меня два разных JS-файла в одной папке.Я дал пространство имен первому файлу JS var fooMYNS = {}; и объявил некоторые переменные, используя это пространство имен fooMYNS.newAr = new Array();.Теперь я вставил некоторые элементы в массиве, скажем {1,2,3,4}.Я хочу использовать детали этого массива во вторых JS-файлах.Как я могу сделать это, используя это пространство имен.

Примечание: секунда вызывается / выполняется только после первых файлов JS, поэтому присвоение массива выполняется.

Или мы можем сделать это без пространств имен?Любые предложения принимаются.Спасибо.

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Предполагается, что в вашем вопросе есть хотя бы одна опечатка - {1,2,3,4} не является ни допустимым массивом, ни допустимым объектом.

Первый файл:

var fooMYNS = {};
fooMYNS.newAr = []; // It's faster to use an empty array than the Array constructor.
fooMYNS.newAr = [1,2,3,4]; // Not sure what happens before this that you can't just assign these values to the array in the first place.

Второй файл:

console.log(fooMYNS.newAr); // This outputs to the browser console [1,2,3,4]
0 голосов
/ 13 июля 2011

Когда оба файла включены в страницу, все, что объявлено с помощью var вне любого объекта, включается в глобальное пространство имен и может быть доступно в любом месте. Вы сможете легко получить доступ к fooMYNS из любой точки вашей страницы.

Проверьте этот другой вопрос / ответ: Как мне объявить пространство имен в JavaScript?

Однако очень хороший способ, которым я видел явное объявление того, что должно быть передано, исходит из node.js и хорошо реализован в Coffeescript Как описано здесь: Как определить глобальные переменные в CoffeeScript

root = exports ? this
root.foo = -> 'Hello World'

Coffeescript автоматически упаковывает все отдельные файлы в замыкание, что действительно помогает вам не загрязнять глобальное пространство имен javascript. В результате это заставляет вас использовать идиому выше, чтобы ТОЛЬКО выставлять именно тот API, который вы хотите.

Приведенный выше код сначала проверяет экспорт (глобальный node.js), в противном случае использует область закрытия (this) и явно присоединяет метод (foo) к этому глобальному пространству.

Теперь в любом другом файле foo будет доступен глобально, но все остальное, не сделанное явно глобально, не будет.

...