2016-10-19 1 views
0

아래는 제 모듈입니다. self로 네임 스페이스 'Module'을 만들고 싶습니다. 그래서 모듈 내부에서 이것을 스스로 할당합니다. 이것으로, 내부 클로저를 대신 모듈을 '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을 참조하는 또 다른 방법이므로 self은 코드에서 작업하는 다른 사람들에게 혼동을 줄 수 있습니다.