2009-11-26 3 views
0

OK. 나는 유스 케이스를 내 내부 프로젝트 여기lib 디자인에 대한 비평이 필요합니다.

(function() { 
    var window = this, 
     undefined; //guaranteed undefined 

    var h3 = window.h3 = function (user) { return window.h3 = new h3.prototype.init(user); }; 

    h3.prototype = { 
     init: function(user) { 
      this.timestamp = +new Date; 
      this.user = user; 
      return this; 
     }, 
     VERSION: '0.0.1', // Current version. 
     timestamp: undefined, 
     user: undefined, 
     a: function() {alert('a');} 
    }; 

    h3.prototype.init.prototype = h3.prototype; 
})(); 

이 lib 디렉토리되어 있습니다 나는 세션 사용자 데이터를 저장하고, 디스플레이 보고서 등의 응용 프로그램 정보 (AJAX를 통해)로드와 같은 응용 프로그램에 대한 몇 가지 기능을 제공하는 LIB 필요 완전히 AJAX로 구동됩니다. jQuery의 도움으로 사용자 자격 증명을 확인하고이 lib를 h3({user:'user_a',foo:'bar'}) 호출로 초기화 할 것입니다. 따라서 나는 h3이라는 전역 객체를 가지며 후자를 사용할 수 있습니다 (예 : h3.a()). 이 객체를 다시 초기화해야한다면 h3.init({user:'user_b',foo:'bla-bla-bla'}) 호출로 처리 할 수 ​​있습니다.
잘 알려진 jQuery 라이브러리에서 영감을 얻은 디자인.
그리고 주요 질문은 - 얼마나 좋든/나쁘지? 이 디자인의 유효성을 검사하도록 도와 줄 수 있습니까?

+1

따로 좋은, 나쁜, 당신은 구현과 테스트가? 작동합니까? –

+0

예, 그 작품. 하지만 저는 아직 넓은 환경에서 테스트하지 않았습니다. – NilColor

답변

2

프로토 타입이 무엇인지, 또는 init이 궁금한 트릭이 방법 및 생성자이거나 추가 생성자 래퍼 인 것으로 확신하지 못합니다. 당신이 그것을 도울 수 있다면 너무 많은 JS 마법을 사용하지 않는 것이 좋습니다. 그것은 보인다, 당신은 단지 하나 개의 글로벌 인스턴스를 가지고있는 경우

, 프로토 타입을 잊지 단순화 :

var h3= { 
    VERSION: '0.0.2', 
    init: function(user) { 
     this.user= user; 
     this.timestamp= +new Date; // note, this. missing in original code 
    }, 
    a: function() { 
     alert('a'); 
    } 
}; 
h3.init({user: 'user_a', foo: 'bar'}); 
+0

동의 함. 너무 자꾸 좋지 않다. 내가 원하는 것은 초기화 전에 h3 사용을 막는 것입니다. 내가 init() 호출 전에'h3.a()'를 호출 할 수있는 방법. 나는 그것을 원하지 않는다. init() 전에 내 버전에서 h3은 단순히 wrapped init 함수이다. ... 'this.timestamp' - 코드를 편집 해 주셔서 감사합니다. – NilColor

+0

보통'a()'는'user'로 무엇인가를 할 것이므로 당신이 전화를했다면 분명히 오류가 발생합니다. 그러나 그렇지 않다면'if (! ('this') ')'check'를 넣는 것이 상대적으로 간단 해 보일 것입니다. – bobince

관련 문제