Каков рекомендуемый подход для вспомогательных функций? Я хотел бы выбрать одну технику и запустить ее, чтобы создать свой новый «класс».
Вот варианты дизайна, которые я обдумал:
Вариант 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
не опубликовано по инстанции. Вспомогательные функции не имеют доступа друг к другу. - Минусы: снижение читабельности и тестируемости; Тестирование этого помощника должно происходить в области инициализации.
object-oriented
javascript
TaylorMac
источник
источник
Ответы:
Во-первых, в JavaScript нет классов .
Во-вторых, ваш третий вариант кажется мне более рациональным, но он также сильно зависит от ваших требований. Кроме того, вы не должны сильно беспокоиться о предоставлении вспомогательной функции. Плюсы решения полностью оправдывают компромисс для меня.
В-третьих, ваше время как разработчика ценно; Не усложняйте выполнение тривиальных задач, отнимайте много времени и более подверженные человеческим ошибкам. Простота исходного кода - отличная особенность.
источник
Статика принадлежит функции IMO, в вашем случае у вас есть частная статика, так что ...
источник