2017-03-10 4 views
2
var nextid = 0 
function Animal(name) { 
    this.name = name 
    Object.defineProperty(this, 'nextid', 
    {value: nextid++, writable: false}) 
} 
var animal1 = new Animal('dog') 
var animal2 = new Animal('cat') 

클로저 또는 팩토리 패턴을 사용하는 것과 비교하면 좋은 방법일까요?객체 식별자 증가

내 질문 (폐쇄 및 공장 패턴 제안)이 thread와 유사하다 : 링크 대답

Incrementing object id automatically JS constructor (static method and variable)

답변

1

그 폐쇄 및 공장 패턴이 로컬 범위 또는 공장에 nextid 변수를 캡슐화에만 존재 예. 일반 객체, 클래스 인스턴스 또는 읽기 전용 속성이있는 인스턴스로 동물을 만드는 방법은 아무 관계가 없습니다. 그들 각각은 똑같이 좋다.

실제로 캡슐화가 필요한지 여부는 모듈화 접근법 (예 : 노드 모듈에서 클로저가 무의미 함)과 ID의 고유성 요구 사항에 따라 다릅니다.

1

ID가 인 개체를 생성 할 때 생성해서는 안되며 개체에 이 할당되어야합니다.이 개체에 지정되어야합니다.

운동 경기를 생각해보십시오. 주자가 등쪽을 선택합니까?

function Animal() { 

} 

var idGenerator = new IdGenerator(); 
var animal = new Animal(); 
animal.id = idGenerator.generate(); 

아마 당신은 여전히 ​​생성자 식별자를 생성 할 수 있습니다,하지만 난 대신 idGenerator를 주입 ID 생성을 하드 코딩 피하려고 것 :

function Animal(idGenerator) { 
    this.id = idGenerator.generate(); 
} 

을 BTW 내 두 당신은 첫 번째 접근법을 따라 가야합니다 : 선수는 등 쪽 몸을 스스로 지정하지 않습니다.

관련 문제