推荐的辅助功能方法是什么?我想选择一种技术,然后运行它来创建我的新“类”。
这是我所考虑的设计选项:
选项1:外部范围内的Helper函数,使用实例的上下文进行调用
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:关闭时的Helper函数,使用实例的上下文进行调用
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
未在实例上发布。辅助函数之间无法相互访问。 - 缺点:可读性和可测试性较低;此助手的测试必须在初始化范围内进行。
请参阅:是否有任何实际上适用于Java的OO原理?
—
gnat 2014年