2010-07-10 4 views
5

C# 프로그래머로서 개인적으로 할 수 있고 개인적으로해야 할 일을 개인적으로 만드는 버릇이 있습니다. JS 유형이 모든 사적인 부분을 나에게 노출시킬 때 항상 이상한 느낌을 갖습니다. aroused '). 내부적으로 drawBackgrounddrawForeground을 호출하는 draw 메서드가있는 유형이 있다고 가정 해보십시오.이 메서드는 자체적으로 호출 할 필요가 없습니다. 어떻게 구현해야합니까?자바 스크립트 : 내 구현을 숨겨야합니까?

옵션 1

Foo = function(){ 
    this.draw(); 
}; 

Foo.prototype.draw = function(){ 
    this.drawBackground(); 
    this.drawForeground(); 
}; 

Foo.prototype.drawBackground = function(){}; 
Foo.prototype.drawForeground = function(){}; 

옵션 2

Foo = (function(){ 

    var constructor = function(){ 
    this.draw(); 
    }; 

    var drawBackground = function(){}; 
    var drawForeground = function(){}; 

    constructor.prototype.draw = function(){ 
    drawBackground.call(this); 
    drawForeground.call(this); 
    }; 

    return constructor; 

})(); 

차이는 물론, 첫번째 예에서, drawBackgrounddrawForeground 방법 공개 API의 일부임을 되 , 반면에 그들은 두 번째 외부에 숨겨져 있습니다. 그게 바람직한가요? 어느 것을 선호해야합니까? 내 C# 습관을 자바 스크립트에 적용하는 것은 잘못되었지만 모든 것을 확장 가능하게 만들고 자바 스크립트에서 재정의 할 수 있어야합니까? 그리고 .call(this)의 성능에 미치는 영향은 무엇입니까?

+0

질문에 오해 한 것 같습니다.하지만 옵션 1에서는 drawBackground/drawForeground가 public (원하는 경우에도 개인이 원하는 경우에도)이므로 옵션 2 만 실행하면됩니다. –

+0

글쎄, 그건 내 질문이다. 할 수있을 때 일을 비공개로 설정하는 것을 선호해야 하는가? – JulianR

답변

7

(유명한) 카멜 책에서 나온 Perl 개발자들 사이에는 잘 알려진 인용구가 있습니다. "Perl 모듈은 초대받지 않았기 때문에 거실에 머 무르지 않는 것이 좋습니다. 엽총이 있기 때문에가 아니라 . " 라이브러리의 개발자로서 공개 API와 비공개 API를 구별하려는 철학이 있다면 좋습니다. 그렇게하고 문서화하십시오. 코드를 호출 한 사람은 어떤 코드인지 알고 있어야하며, 호출해야한다고 생각하지 않는 것을 호출하고 결정할 경우 바보처럼 행동 할 수 있어야합니다. OO 배경에서, 그것은 이단이지만, 스크립팅 언어를 사용하면 그것이 어떻게 굴러가는 지 알 수 있습니다.

이것에 대한 대답은 약간 주관적이지만 JavaScript를 작성하고 .NET에서 코딩하는 경우 비공개가 될 메소드 나 변수가있을 때이를 알려줍니다. "prv_"또는 "p_"또는 그냥 "_"... 무엇이든 보트를 표류시킵니다. 그렇게하면 사용자에게이 내용은 비공개로되어 있으며 그 아래에서 변경 될 수 있다고 말한 것입니다. 그리고 그런 식으로, 어쨌든 사적인 방법을 호출하기로한다면, 코드가 아픈 엄지 손가락처럼 튀어 나오게된다면.

+1

그래, ExtJS와 같은 프레임 워크에서 많은 것들을 볼 수있다. ExtJS는 완벽하게 액세스 할 수 있지만 상황이'private // '로 표시되어있다. – JulianR

+0

_ 앞에 접두사를 붙이는 것은 라이브러리에서 가장 일반적으로 사용되는 방법입니다. 일부는 주석 또는 @private JSdoc 어노테이션을 사용한다. –