JavaScript에서 도우미 함수에 권장되는 방법은 무엇입니까?


10

도우미 기능에 권장되는 방법은 무엇입니까? 하나의 기술을 선택하고 새로운 "클래스"를 만들기 위해 실행하고 싶습니다.

내가 생각한 디자인 옵션은 다음과 같습니다.

옵션 1 : 외부 범위의 도우미 기능, 인스턴스 컨텍스트를 사용하여 호출

function createPane (pane) {
    // logic to create pane
    var proto = Object.create(this.paneList);
    $.extend(paneProto, pane);
    return paneProto;
}

Panes.prototype.initialize = function (panes) {
    var _this = this;
    _.each(panes, function () {
        _this.panes.push(createPane.call(_this, this));
    });
}
  • 장점 : 간단한 구문. createPane인스턴스에 게시되지 않았습니다.
  • 단점 : createPane 다른 범위에서 액세스 할 수 있습니다.

옵션 2 : 클로저의 도우미 함수, 인스턴스의 컨텍스트로 호출

Panes.prototype.initialize = (function () {

    function createPane (pane) {
        // same logic as last createPane
    }

    return function (panes) {
        // same logic as before - calls createPane
    }

})();
  • 장점 : createPane 인스턴스에 게시되지 않았습니다.
  • 단점 : 가독성 및 테스트 가능성이 낮습니다. 이 헬퍼의 테스트는 초기화 범위에서 발생해야합니다.

옵션 3 : 개인 메소드를 표시하기 위해 이름 앞에 _를 붙입니다

Panes.prototype._createPane = function (pane) {
    // same logic as last createPane
}

Panes.prototype.initialize = function (panes) {
    // same logic as last, except calls this._createPane
}
  • 장점 : 암시 적 컨텍스트 _createPane가 인스턴스입니다. 외부에서 테스트 할 수 있습니다.
  • 단점 : 인스턴스에 도우미 기능 노출.

옵션 4 : 도우미 함수를 인수로 사용

Panes.prototype.initialize = (function (createPane) {

    return function (panes) {
        // same logic as before - calls createPane
    }

})(function createPane () {
   // same logic as last createPane
});
  • 장점 : createPane 인스턴스에 게시되지 않았습니다. 도우미 기능은 서로 액세스 할 수 없습니다.
  • 단점 : 가독성 및 테스트 가능성이 낮습니다. 이 헬퍼의 테스트는 초기화 범위에서 발생해야합니다.

답변:


4

첫 번째 JavaScript에는 Classes 가 없습니다 .

둘째, 세 번째 옵션은 나에게 더 합리적이지만 귀하의 요구 사항에도 크게 의존합니다. 또한 도우미 기능 노출에 대해 걱정할 필요가 없습니다. 솔루션의 전문가는 나에게 타협을 전적으로 정당화합니다.

셋째, 개발자로서의 시간은 소중합니다. 사소한 작업을 구현하기 어렵고 시간이 많이 걸리며 사람의 실수에 더 취약하게 만들지 마십시오. 소스 코드의 단순성은 훌륭한 기능 그 자체입니다.


1
마흐디 감사합니다. 나는 오랫동안 자바 스크립트 사용자이고 그렇기 때문에 따옴표로 "클래스"를 쓴 이유입니다. 용어는 오해의 소지가 있지만 많은 전문 조직은 JavaScript의 생성자 함수를 클래스로 참조합니다. developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac

그리고 단순성에 대한 제안에 감사드립니다. 내 질문은 접근성보다 범위에 관한 것입니다. 엄격한 대 느슨한.
TaylorMac

@TaylorMac 매우 환영합니다. 도움이 되길 바랍니다.
Mahdi

@Mahdi, currenlty Javscript에는 수업이 있습니다.
Menai Ala Eddine

1

스태틱은 함수 IMO에 속하며, 귀하의 경우 개인 스태틱이 있으므로 ...

Panes._createPane=function(pane){}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.