2016-10-19 6 views
0

以下は私のモジュールです。私は自分自身で 'モジュール'の名前空間にしたい。 モジュールの内部で、私はこれを自己に割り当てます。これで、私はモジュールを 'self'としてコールすることができます。これは私の考えです。しかし、それはエラーを与える。キーワード「this」のクロージャ混同

モジュール名の代わりに自己または他の変数名を使用するにはどうすればよいですか?あなたのコードで

jQuery(document).ready(function($) { 
     var Module = (function(sendTo){ 
      var self = this; 
      return { 
       init: function() { 
        console.log('start'); 
        this.login(); //ok 
        Module.login() //ok 
        self.login() //TypeError: self.login is not a function 

       }, 

       login: function() { 
        console.log('login'); 

       } 
      } 

     })(interface); 

     Module.init(); 
}); 

答えて

1

selfはあなたのオブジェクトを作成したときthisが持っていた値を有し;それはあなたのオブジェクトを参照していません。あなたはModule.initinitプロパティは、コール・セット中から来たことをオブジェクトにthisを設定する通常のメカニズムを呼び出すとき。

あなたは常にselfを経由して、あなたのオブジェクトを参照したい場合は、あなたが作成しているオブジェクトを割り当てますあなたのコードの外何もselfかのどちらかModuleを変更することができないこと、しかし

jQuery(document).ready(function($) { 
     var Module = (function(sendTo){ 
      var self = {      // *** 
       init: function() { 
        console.log('start'); 
        this.login(); 
        Module.login(); 
        self.login(); 
       }, 

       login: function() { 
        console.log('login'); 

       } 
      }; 
      return self;      // *** 

     })(interface); 

     Module.init(); 
}); 

注意を、ので、同じオブジェクトのための両方の識別子を持つように少し冗長です:それは、その後、それを返します。また、selfはシャドーイングする組み込みグローバルであることに注意してください(これはwindowを参照するもう1つの方法ですが、若干の違いがあります)。selfはコード内で作業している他の人に混乱させるかもしれません。

関連する問題