2014-09-20 6 views
2

Я изучаю Meteor, и я пытаюсь понять, как это работает, модульно-мудрый, по сравнению с другими системами OOP, с которыми я знаком, например с Python.Модульная модульность и защита доступа - это все «глобальное»?

Мне показалось, что разбивка вещей на отдельные файлы - HTML-шаблоны, соответствующие JS-файлы - была довольно произвольной и соответствовала только организации в уме программиста. Есть что-то еще?

Как я понимаю, все javascript соединены вместе, все HTML, все CSS, все шаблоны.

Есть ли смысл какой-либо защиты, которую можно получить с модулями Python, с классами ООП? Я знаю, что объявляет ли переменная в файле Meteor JS с «var» или не определяет, имеет ли он глобальный доступ, - как использовать это для «модуляции» приложения, если все файлы Javascript соединены вместе (если они : фактически соединены вместе)?

Простите мой вопрос о ulta-newbie, но если у вас есть представление о том, как увидеть лес для деревьев, очень ценим.

ответ

1

Добавляя к ответу Пеппе, то же самое происходит на сервере.

Если вы хотите объявить что-то, как глобальные, опускаем var при объявлении переменной:

some_global_thing = {} 

Это добавит, что window (или global если код находится на сервере) объекта, который будет делать он доступен по всему миру.

То же самое работает для функций. Подумайте об этом:

function my_fn() {} 

будут посланы как:

(function(){ 
    alert("This is file 2.") 
})() 

Таким образом, чтобы сделать их по всему миру доступны, вы должны объявить их как:

my_fn = function() {} 
+0

Спасибо. Я бы это прочитал. Как использовать этот факт для модуляции кода? Я полагаю, очевидно, что каждый файл существует в значительной степени в своем собственном пространстве, не загрязняя глобальное пространство. Помимо того, что они взаимодействуют через глобальные переменные, как они? Мне может не хватать лес для деревьев, но, исходя из фона oop, где есть импорт b и имеет доступ к нескольким публичным методам, я немного запутался. – Cerulean

+1

@Cerulean существует только два пространства имен: «пространство имен файлов» (используйте «var') и« глобальное пространство имен »(опустить« var'). Третий вариант - создание пакета. Пространства имен в пакетах работают одинаково, но вы определяете, какие глобальные переменные должны быть видимыми для приложений, использующих ваш пакет. –

3

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

Вашего file1.js:

alert("This is file 1.") 

Ваш file2.js:

alert("This is file 2.") 

Что посылается клиенту:

(function(){ 
    alert("This is file 1.") 
})() 

(function(){ 
    alert("This is file 2.") 
})() 

Таким образом, локальные переменные в файлах не будут влиять друг на друга, поскольку они являются локальными для функций.