Лучший подход избегает конфликтов имен для javascript-функций в отдельных файлах .js?
Есть ли предпочтительный подход для выделения функций в файле .js из потенциальных конфликтов с другими .js файлами на странице из-за похожих имен?
Например, если у вас есть функция
function AddTag(){}
в Core.js, а затем существует
function AddTag(){}
в Orders.js они конфликтуют. Как лучше всего структурировать ваши .js файлы и какие соглашения об именах вы использовали бы для их изоляции?
Спасибо
Ответы
Ответ 1
Я ограничиваю область действия этого файла.
(function () {
var AddTag = function AddTag () {
};
}());
... и иногда делают некоторые функции в нем доступными для глобальной области:
var thisNamespace = function () {
var AddTag = function AddTag () {
…
};
var foo = function foo() {
AddTag();
…
};
var bar = function bar() {
…
};
return {
foo: foo,
bar: bar
}
}();
Ответ 2
Вы можете использовать "namespacing". Как этот
File1.js:
var Orders = {}
(function(o) {
o.function1 = function() {}
o.function2 = function() {}
})(Orders);
File2.js
var Sales = {}
(function(o) {
o.function1 = function() {}
o.function2 = function() {}
})(Sales);
Вы можете вызвать их следующим образом:
Sales.function1();
Orders.function1();
В общем случае не используйте глобальные функции/переменные. Читайте о шаблоне модуля javascript здесь http://yuiblog.com/blog/2007/06/12/module-pattern/
Ответ 3
использовать инкапсуляцию (http://www.devx.com/gethelpon/10MinuteSolution/16467 и http://nefariousdesigns.co.uk/archive/2006/05/object-oriented-javascript/)
в файлеA.js
function fileA()
{
this.function1 = function()
{
return 'foo';
};
}
в файлеB.js
function fileB()
{
this.function1 = function()
{
return 'bar';
};
}