Сборка моей библиотеки JS, пара вопросов - PullRequest
3 голосов
/ 29 ноября 2010

Я строю библиотеку (точнее, https://github.com/OscarGodson/storageLocker), обертку localStorage, но поскольку я впервые пробую OO JavaScript, я все еще учусь и у меня есть пара вопросов.

  1. Я видел в других библиотеках, что иногда они обертывают их в анонимную функцию. Делаю ли я это или нет, с этим? И если да, то как ничего не сломать?

  2. Для внутреннего API (в основном, для внутренних функций), как мне их написать? Следует ли добавить их к основному объекту, например, storageLocker.prototype.myInternalFunction() или просто myInternalFunction() случайно в моем скрипте? Я не хотел функцийхотя быть глобальным ... Одна из функций, например, просто проверяет группу элементов в JSON, проверяет, являются ли их объекты, а затем проверяет тип объекта (например, Date()), а затем преобразует его.

  3. Как / где я должен добавить глобальные, к моему сценарию, переменные? Например, у меня есть переменная с именем patterns, что-то вроде var patterns = {"date":/\/Date\(([0-9]+)\)\//} как мне добавить это в свой сценарий?

Большое спасибо. Я хочунаписать мой сценарий правильный путь , поэтому я прошу вас, ребята.Я не знаю ни одного парня из JS, который бы делал OO JS, все они из старшей школы ...

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Я бы сказал:

1) цель этой техники - не загрязнять глобальное пространство имен. Это хорошая вещь. В приведенном ниже примере вы можете видеть, что все ваше взаимодействие с библиотекой происходит через один объект MyLibrary. Открытый API - это возвращаемое значение анонимной функции.

var MyLibrary = function() {
// private
   this.InternalVariable = 'some value';

   function internalFunction(x,y) {
      return x + y;
      }

     function getInternalVariable() {
    return this.InternalVariable;
}
// public
   return {
      publicVariable : '1.0',
      publicFunction : function(x,y) {
         return x + y
         },
 accessInternalVariable : function() {

     return getInternalVariable();
     }
      }
   }();

2) см. Также пример выше о том, как разместить ваши «внутренние» функции

3) если ваша глобальная переменная является каким-то параметром конфигурации, я бы просто сделал public setter / getter и оставил бы переменную "private"

2 голосов
/ 29 ноября 2010

http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-up-part-2-technical/

имеет достойный раздел о пространстве имен, который стоит прочитать.

http://yuiblog.com/blog/2007/06/12/module-pattern/

- еще один хороший обзор.

Чтобы узнать больше о хороших методах JavaScript, ознакомьтесь с:

http://javascript.crockford.com/

После обсуждения в комментариях яМы изменили пример следующим образом:

var storageLocker = function (selector) {

    var _selector = selector || "default value";

    function myPrivateFunction() {

    }

    var public = {

        get: function () {
            return _selector;
        },

        uppercase : function () {
            _selector = _selector.toUpperCase()
            return this;
        }

    }
    return public;

};

// use:
var test = storageLocker("search for this").uppercase().get();;

alert(test);

Хотя это не совсем пример библиотеки / модуля (потому что вы обращаетесь к коду, вызывая конструктор напрямую), это пример сохранениятот же объект в области видимости для дальнейшего объединения методов.На самом деле он не возвращает объект storageLocker, он возвращает открытый объект, но этот объект имеет доступ к области действия storageLocker через замыкание.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...