ヘルパー関数の推奨アプローチは何ですか? 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にはClassesがありません。
第二に、あなたにとって3番目のオプションは私にはより合理的であるように見えますが、それはあなたの要件にも大きく依存します。また、ヘルパー関数を公開することについてそれほど心配する必要はありません。ソリューションの長所は、私に対する妥協を完全に正当化します。
第三に、開発者としてのあなたの時間は貴重です。些細なタスクを実装するのが難しく、時間がかかり、ヒューマンエラーが発生しやすいものにしないでください。ソースコードのシンプルさはそれ自体が素晴らしい機能です。
スタティックは関数IMOに属しています。あなたの場合、プライベートスタティックがあるので...
Panes._createPane=function(pane){}