2017-02-16 13 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, []); 

私は暴露のモジュールのパターンのようなものをやってよりも良くある上記の方法を知って興味があります。また、私はcreate関数のメカニズムについても不明です。誰かが渡されたプロトタイプに基づいてオブジェクトを作成するプロセスを通して私を歩くことができますか?

+0

'create'はどのように使われますか? – Bergi

+0

'expose'メソッドは、露出と初期化を混同しています。 – Bergi

答えて

1

最初のコードブロックは、3つの関数を持つオブジェクトを返すことから始まり、その引数に従ってオブジェクトを返すコンストラクタ関数であるexpose関数を呼び出します。 expose関数は、このオブジェクトをNameSpaceとともにウィンドウオブジェクトに追加します。 このコードは、ライブラリをウィンドウオブジェクトに配置するときに便利なようです。

2番目のコードブロックでは、変数libraryNameSpaceをwindow.libraryNameSpaceまたは空のオブジェクトとして宣言しています。 window.libraryNameSpaceはおそらくこの時点では未定義です。変数をobjectに設定します。次に、このオブジェクトに対して自己呼び出し関数を追加します。

主な違いは、オブジェクトをどのように扱っているかです。 {}、Object.create、new ConstructorFunc()、mutabilityの違いがあります

関連する問題