2012-01-19 2 views
5

자바 스크립트에서 모듈 패턴을 사용하는 경우 생성자를 어떻게 정의해야합니까? 내 생성자를 표준 모듈 패턴에 맞추고 글로벌하지 않기를 바란다.모듈 패턴의 생성자

왜이 작품과 같은 것이 아닌가? 완전하고 말도 안되는 이유는 무엇입니까?

var HOUSE = function() { 
    return { 
     Person: function() { 
      var self = this; 
      self.name = "john"; 
      function name() { 
       return self.name; 
      } 
     } 
    }; 
}(); 

var me = new HOUSE.Person(); 
alert(me.name()); 
+0

는'self.name' 문자열' "존"입니다'당신이 그것을 호출 할 수 있도록. 로컬 함수'name'은 어디에도 export되지 않습니다. – Raynos

+0

업데이트 된 질문이지만 완벽하게 좋은 답변을 만들었으므로 이해가되지 않아 다시 변경되었습니다. – zode64

답변

1

이 메소드를 가져와 Person 프로토 타입에 연결해야합니다. 당신이 할 때, 당신은 이름 속성과 작동하지 않습니다 이름 방법을, 그래서 후자의

HOUSE.Person.prototype.getName = function(){ 
    return this.name; 
} 

이름을 바꾸는 것을 고려하거나, 당신은 단지 this에 첨부 수 있고, getName a를 만들거야 특권있어서

Person: function() { 
     this.name = "john"; 
     this.getName = function() { 
      return this.name; 
     } 
    } 
+0

거기에 약간의 구문 문제가 있다고 생각합니다. :) – pimvdb

+0

그래서'var self = this'를 지정하면 변경되지 않습니다. – zode64

+0

또한 좋은 생각으로 생각하는 것입니까? – zode64

2

varfunction foo() {} ("단지"function foo() {}를 할당하지 않고 수단 선언 같은 후자)를 사용하여, 로컬 심볼을 생성한다. 따라서 함수는 생성자 외부에서 사용할 수 없습니다. 이미 name을 사용

self.getName = function() { 
    return self.name; 
}; 

주, 그래서 다른 이름 기능을 주었다 : 당신이 (당신이 self = this을 정의하기 때문에 또는 self), 당신은 this에 할당한다 (공개) 노출 할 무엇이든

. name 문자열을 로컬로 만들고 기능을 노출하려면 충돌이 없으므로 동일한 이름을 사용할 수 있습니다. 예컨대 :

var name = "john"; 

self.name = function() { 
    return name; 
}; 
3

귀하의 코드는 거의 괜찮습니다. 그러나 함수 name()은 public이 아니었지만 변수가 오류를 일으키는 변수를 실행하려고 시도했습니다. 객체에 기능 getName를 추가하고 대신 전화 :

var HOUSE = function() { 
    return { 
     Person: function() { 
      var self = this; 
      self.name = "john"; 
      self.getName = function() { 
       return self.name; 
      } 
     } 
    }; 
}(); 

var me = new HOUSE.Person(); 
alert(me.getName()); 

http://jsfiddle.net/8nSbP/

+1

이것이 좋은 연습이라고 생각합니까? – zode64