2012-11-23 2 views
3

생성자 함수가 자체 _proto_ 속성이 있고 생성자 함수에 'prototype'속성을 제공하는 javascript에서 새 객체를 만들 때 인스턴스화 될 수 있음을 알게되었습니다.javascript : constructor function vs single use 용 공개 모듈 패턴

다음
function MyController() { 
    var controllerName = 'initialcontroller'; 
    function init() { 
     console.log(controllerName); 
    } 
    this.init = init; 
} 

, 초기화는 다음과 같이 호출 할 수 있습니다

var mycontroller = new MyController(); 
mycontroller.init();  

가 난 단지 한 번만 결코 다시 인스턴스화하고 가정하면,되어 있지이 잔인한 나는 모든을 사용하지 않는 경우 MyController.prototype에서 제공하는 프로토 타입 속성?

질문 : 대신 공개 모듈 패턴을 사용하여 이렇게 코딩 할 수 있습니까?

다음
var myController = function() { 
    var controllerName = 'initialcontroller'; 
    function init() { 
     console.log(controllerName); 
    } 
    return { 
     init : init 
    } 
}(); 

는, 초기화는 다음과 같이 호출 할 수 있습니다 :이 경우

myController.init(); 

, 내가 존재하지 않는 MYCONTROLLER 내부의 속성에 액세스하려고하면, 자바 스크립트 엔진을 찾기 위해 시도하지 않습니다 속성이 프로토 타입 체인의 어느 위치에 있든 상관 없으므로 시간을 절약 할 수 있습니다.

또는 내가 간과하는 기능을 인스턴스화하는 데 다른 장점이 있습니까?

+0

예, 노출 모듈 패턴을 사용하여 이렇게 코드를 작성할 수 있습니다. 그것은 완벽하게 유효합니다. 또한 코드가 짧습니다. – Cerbrus

답변

2

당신은 단순히 몇 가지 방법과 다른 특성을 가진 개체 -like는 "싱글"을 원한다면, 당신은 단지 더 많은 것들을 단순화하는 객체 리터럴을 사용할 수

var myController = { 
    init: function (foo) { 
     // do something with foo or whatever 
    } 
} 

myController.init("bar"); 

또는 - 당신은 어떤 "개인이 필요한 경우 프로토 타입 조회 시간에 대한

var myController = (function() { 
    var internal = "i am private"; 
    return { 
     init: function() { 
      // blah blah 
     } 
    }; 
}()); 

myController.init(); 

: 네, 이론적으로, 조회는 존재하지 않는 속성에 액세스하려고하는 프로토 타입 체인을 통과 "내부 상태는 일반 계시 모듈 패턴을 사용합니다. 이론적으로, 이것은 "0"특정 생성자가없는 평범한 'Object 인스턴스의 경우에는 더 짧은 일 때 더 빠른 일 수 있습니다. 실제로이 성능에 미치는 영향은 무시해도 좋습니다. 당신이 정말로 그것을 필요로하지 않는다면 여기에서 최적화를 시도하지 마십시오. :)

관련 문제