Який рекомендований підхід для допоміжних функцій у JavaScript?


10

Який рекомендований підхід для допоміжних функцій? Я хотів би вибрати одну техніку і побігти з нею, щоб створити свій новий "клас".

Ось варіанти дизайну, про які я розмірковував:

Варіант 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 не публікується в екземплярі. Функції помічників не мають доступу один до одного.
  • Мінуси: менша читабельність та перевіряемость; Тестування цього помічника має відбуватися в межах ініціалізації.

Відповіді:


4

Перший JavaScript не має класів .

По-друге, ваш третій варіант здається мені більш раціональним, але він дуже залежить і від ваших вимог. Крім того, ви не повинні сильно турбуватися про виявлення функції помічника. Плюси рішення повністю виправдовують компроміс для мене.

По-третє, ваш час як розробника цінний; Не робіть тривіальних завдань важкими для виконання, забираючи багато часу та не сприймаючи помилок людини. Простота вихідного коду - сама відмінна особливість.


1
Махді дякую. Я давно користувач JavaScript, і так, саме тому я написав "клас" у лапках. Хоча термінологія вводить в оману, і багато професійних організацій функції конструктора JavaScript називають класами. developer.mozilla.org/en-US/docs/Web/JavaScript/…
TaylorMac

І дякую за пропозицію щодо простоти. Моє запитання стосується більше сфери, ніж будь-чого, доступності. Строгий проти розкутий.
TaylorMac

@TaylorMac Ви дуже раді, сподіваємось, це допоможе.
Махді

@Mahdi, currenlty Javscript має заняття.
Менай Ала Еддін

1

Статистика належить до функції IMO, у вашому випадку у вас є приватна статика, тому ...

Panes._createPane=function(pane){}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.