2017-02-16 6 views
0

Was bewirkt dieser Codeschnipsel? Was ist der praktische Nutzen? Ich habe diesen Code nicht geschrieben. Ich fand es hier: https://gist.github.com/anonymous/7407896Direkt aufgerufenes Objektliteral

!{ 
    //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, []); 

Ich bin interessiert zu wissen, wie die oben ist besser als so etwas wie ein aufschluss Modul Muster zu tun. Auch ich bin unklar über den Mechanismus der create-Funktion. Kann mich jemand durch den Prozess des Erstellens von Objekten auf der Basis der eingegangenen Prototypen führen?

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

Wie würde 'create' verwendet werden? – Bergi

+0

Diese "Expose" -Methode vermischt Belichtung und Initialisierung. – Bergi

Antwort

1

ersten Codeblock beginnt mit einem Objekt mit drei Funktionen zurückkehr dann belichten Funktion aufrufen, die Konstruktionsfunktion ist, die ein Objekt zurückgeben gemäß es Argumente ist. expose function fügt dieses Objekt dem window-Objekt mit seinem NameSpace hinzu. Es sieht so aus, als ob dieser Code nützlich sein könnte, wenn man Bibliotheken in ein Fensterobjekt legt.

Im zweiten Codeblock deklarieren Sie einen Variablennamen libraryNameSpace als window.libraryNameSpace oder leeres Objekt. Da window.libraryNameSpace zu diesem Zeitpunkt wahrscheinlich undefiniert ist. es wird die Variable auf Objekt setzen. Dann fügen Sie eine selbstaufrufende Funktion für dieses Objekt hinzu.

Hauptunterschied ist, wie Sie mit Objekt zu tun haben. Es gibt Unterschiede zwischen {}, Object.create, new ConstructorFunc(), auch Änderbarkeit

Verwandte Themen