ヘルパー関数の推奨アプローチは何ですか?1つの手法を選択し、それを実行して新しい「クラス」を作成します。
ここに私が考えたデザインオプションがあります:
オプション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に実際に適用できるオブジェクト指向の原則はありますか?
—
gnat 2014