2014-03-31 5 views
1

다음 두 패턴의 차이는 있습니까? 첫 번째자가 수행의 장점은 무엇입니까?자바 스크립트 - 모듈 패턴 차이점

var testModule = (function() { 
    var counter = 0; 

    return { 
    incrementCounter: function() { 
     return counter++; 
    }, 

    resetCounter: function() { 
     console.log("counter value prior to reset: " + counter); 
     counter = 0; 
    } 
    }; 
})(); 

testModule.incrementCounter(); // 1 

다음 :

var testModule2 = function() { 
    var counter = 0; 

    return { 
    incrementCounter: function() { 
     return counter++; 
    }, 

    resetCounter: function() { 
     console.log("counter value prior to reset: " + counter); 
     counter = 0; 
    } 
    } 
} 

var result = testModule2(); 
result.incrementCounter(); //1 
+2

가장 큰 차이점은 첫 번째 개체는 하나의 개체 만 만들 수 있고 두 번째 개체는 여러 개체를 만들 수 있다는 것입니다. 너는 그 이상으로 뭔가를 찾고 있었습니까? –

+0

아하네. 알았어. 나는 그것을 알아 차리지 못했다. 그래서 첫 번째 객체는 하나의 객체 만 허용하고 두 번째 객체는 여러 객체를 포함 할 수 있습니까? – KingKongFrog

+1

음, 함수에 대한 참조를 유지하면 원하는만큼 여러 번 호출 할 수 있습니다. 참조를 유지하지 않고 즉시 호출 만하면 유용합니다. 이것은 모듈 패턴과 관련이 없습니다. 그것은 단순한 논리입니다. 참조 할 수없는 함수는 호출 할 수 없습니다. –

답변

4

은 첫 번째 싱글 - 당신은 물론, 그것을 복제 할 수 있지만, 그것은 아주 어색 수 있습니다, 첫째, 그 개인의 사본을하지 않습니다 변수 : 복제 된 모든 객체의 모든 메소드는 여전히 동일한 var counter으로 작동합니다. 그것이 서비스와 같은 것을 만들기에 적합한 이유입니다.

두 번째 것은 실제로 생성자 함수의 변형입니다. 단일 템플릿을 기반으로 여러 객체를 만드는 데 적합합니다. 기존의 prototype 기반 템플릿과 비교할 때의 단점은 testModule2이 호출 될 때마다 새로 정의 된 모든 함수가 작성된다는 것입니다. 장점 - 개인 변수, 각 새 개체에 대한 독립적 인 집합 (첫 번째 방법으로 만든 개체 복제와의 차이점에 유의하십시오).

관련 문제