2017-02-16 29 views
0

Что делает этот фрагмент кода? Каково его практическое использование? Я не писал этот код. Я нашел его здесь: https://gist.github.com/anonymous/7407896Сразу вызывается объект литерал

!{ 
    //convenience methods here for create and expose via this 
    create: function(options){ 
     //constructor logic here 
     var created = Object.create(this.fn); 
     var args = [].slice.call(arguments); 
     this.plugins.forEach(function(plugin){ 
      plugin.apply(created, args); 
     }); 
     return created; 
    }, 
    fn:{//prototype methods here 

    }, 
    expose:function(NameSpace, window, document, plugins){ 
     window[NameSpace] = this;//This can be tweaked for whatever 
     this.document = document; 
     this.plugins = plugins; 
    } 
}.expose("LibraryNamespace", window, document, []); 

Мне интересно знать, как это выше, лучше, чем делать что-то вроде откровенном шаблон модуля. Также я не понимаю механизм создания функции. Может ли кто-нибудь пройти меня через процесс создания объектов на основе прототипов?

var libraryNameSpace= window.libraryNameSpace || {}; 
libraryNameSpace.myFeatureOne = (function(){ 
    var _bar = "_bar"; 
    var foo = "foo" + _bar; 
    function foobar(){ return "foobar"; } 
    return { 
     myFoo : foo; 
     fooBarMethod: foobar; 
    }; 
})(); 
+0

Как будет использоваться 'create'? – Bergi

+0

Этот метод 'expose' смешивает экспонирование и инициализацию. – Bergi

ответ

1

Первый блок кода начинается с возвращения объекта с тремя функциями затем вызвать разоблачить функцию, функцию конструктора, которая возвращает объект в соответствии с его аргументами. Функция экспонирования добавит этот объект в объект окна с его именем. Кажется, что этот код может быть полезен при помещении библиотек в объект окна.

Во втором блоке кода вы объявляете библиотеку имен именNameSpace как window.libraryNameSpace или пустой объект. Поскольку window.libraryNameSpace, вероятно, не определено в этот момент. он установит переменную в объект. Затем вы добавляете функцию self invoking для этого объекта.

Главное отличие заключается в том, как вы имеете дело с объектом. Есть разница между {}, Object.create, new ConstructorFunc(), также изменчивость

 Смежные вопросы

  • Нет связанных вопросов^_^