Как правило, это сводится к инкапсуляции ваших объектов в «пространство имен». Я использую здесь кавычки, потому что этот термин не является официальной семантикой в JavaScript, а достигается за счет базовой инкапсуляции объектов.
Есть несколько способов сделать это, и в конечном итоге все сводится к личным предпочтениям.
Один из подходов состоит в том, чтобы просто использовать базовый объект JS и хранить в нем все. Имя объекта должно быть семантическим и придавать объекту какое-то значение, но в остальном его цель состоит в том, чтобы просто обернуть ваш собственный код и не допустить его попадания в глобальное пространство имен.
var SomeName = {
alpha: 1,
beta: {a: 1, b: 2},
gamma: function(){
SomeName.alpha += 1;
}
}
В этом случае в глобальном пространстве имен находится только SomeName. Единственным недостатком этого подхода является то, что все внутри пространства имен является общедоступным, и вы должны использовать полное пространство имен для ссылки на объект, а не использовать «это», например. в SomeName.gamma мы должны использовать SomeName.alpha для ссылки на содержимое alpha.
Другой подход состоит в том, чтобы сделать ваше пространство имен функцией со свойствами. Приятной особенностью этого подхода является то, что вы можете создать «частную» переменную через замыкания. Это также дает вам доступ к закрытым функциям и переменным без полной ссылки на пространство имен.
var SomeName = (function(){
var self = this;
var privateVar = 1;
var privateFunc = function() { };
this.publicVar = 2;
this.publicFunc = function(){
console.log(privateVar);
console.log(this.publicVar); // if called via SomeName.publicFunc
setTimeout(function(){
console.log(self.publicVar);
console.log(privateVar);
}, 1000);
};
}();
Еще одним преимуществом этого подхода является то, что он позволяет защитить глобальные переменные, которые вы хотите использовать. Например, если вы используете jQuery И другую библиотеку, которая создает переменную $, вы всегда можете быть уверены, что ссылаетесь на jQuery при использовании $ следующим образом:
var SomeName = (function($){
console.log($('div'));
})(jQuery);
person
Matt
schedule
10.06.2011