Мой собственный мини-фреймворк не совместим с некоторыми проектами - PullRequest
1 голос
/ 31 октября 2011

Мне не удалось создать мини-библиотеку с некоторыми полезными функциями, которые я нашел в Интернете, и я хочу легко их использовать, просто включив файл в HTML (например, jQuery).

проблема в том, что некоторые vars и функции имеют одно и то же имя, и они вызывают проблемы.

Есть ли лучшее решение для этого, вместо того, чтобы давать сумасшедшие имена vars / funcs вроде "bbbb123", так что есть вероятность, что кто-торабота с переменной "bbbb123" действительно низкая?

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Вы должны взять одно имя переменной в глобальном пространстве имен, которое имеет малые шансы на использование, и поместить все остальное под ним (в собственном пространстве имен).

Например, если я хочу вызвать мойбиблиотека AzureLib:

AzureLib = {
    SortSomething: function(arr) {
        // do some sorting
    },
    DoSomethingCool: function(item) {
        // do something cool
    }
};

// usage (in another JavaScript file or in an HTML <script> tag):
AzureLib.SortSomething(myArray);
2 голосов
/ 31 октября 2011

Я бы поместил все ваши функции и переменные в один объект для вашей библиотеки.

var MyLibrary = {
  myFunc: function() {
    //do stuff
  },

  myVar: "Foo"
}

Существует несколько различных способов определения «классов» в JavaScript. Здесь - хорошая страница с 3 из них.

1 голос
/ 31 октября 2011

Да, вы можете создать объект как пространство имен. Есть несколько способов сделать это синтаксически, но конечный результат примерно одинаков. Ваше имя объекта должно быть тем, что никто другой не использовал.

var MyLibrary = {

    myFunc: function() { /* stuff */ }

};

Просто запомните, это синтаксис литерала объекта, поэтому вы используете label : value, чтобы поместить вещи в него, а не var label = value;.

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

var MyLibrary = (function() {

    var foo = 'bar';

    return {
        myFunc: function() { /* stuff */ }
    };

})(); // execute this function right away to return your library object
1 голос
/ 31 октября 2011

Вы можете поместить все функции вашей библиотеки внутри одного объекта.Таким образом, пока имя этого объекта не конфликтует, вы будете в порядке.Что-то вроде:

var yourLib = {};

yourLib.usefulFunction1 = function(){
    ..
};

yourLib.usefulFunction2 = function(){
    ..
};
...