도우미 기능에 권장되는 방법은 무엇입니까? 하나의 기술을 선택하고 새로운 "클래스"를 만들기 위해 실행하고 싶습니다.
내가 생각한 디자인 옵션은 다음과 같습니다.
옵션 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
인스턴스에 게시되지 않았습니다. 도우미 기능은 서로 액세스 할 수 없습니다. - 단점 : 가독성 및 테스트 가능성이 낮습니다. 이 헬퍼의 테스트는 초기화 범위에서 발생해야합니다.
참조 : Javascript에 실제로 적용 가능한 OO 원칙이 있습니까?
—
gnat