Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Не понятен паттерн конструктора

#javascript #angularjs


В примерах по AngularJS, которые используют сервисы всегда демонстрируют такой паттерн:

module.factory('myFactory', function($log) {
    var myFactory = {
        this.getLog = function () {
            console.log('Bla bla bla')
        }
    };
    return myFactory;
});


Не могу понять почему не сделать вот так:

module.factory('myFactory', function($log) {
    return {
        this.getLog = function () {
            console.log('Bla bla bla')
        }
    };
});


Зачем нужен этот бесполезный var myFactory?
    


Ответы

Ответ 1



Это скорее всего дело стилистики: возвращать что-либо как есть либо через промежуточную переменную. Использование промежуточной переменной потенциально делает код гибче на случай добавления функционала и дружелюбным к отладке, когда точку остановки можно будет поставить сразу после переменной. На мой взгляд переменными оперировать удобнее, чем анонимными объектами или результатами вызовов. В данном случае, если например фабрику нужно будет расширить миксинами или пронаследовать от другого объекта, то удобнее это будет сделать с использованием переменной. Хочу поделиться еще одним вариантом, который описывается в Angular Style Guide: module.factory('myFactory', function($log) { var myFactory = { foo: foo, bar: bar }; return myFactory; //////// function foo() { console.log('foo'); } function bar() { console.log('bar'); } } Плюс в том, что размещение публичного интерфейса сверху делает код фабрики читаемее и позволяет сразу увидеть все, с чем она позволяет работать + сразу видно то, что нужно покрывать тестами. Это особенно полезно тогда, когда код фабрики разрастается и приходится скроллить, чтобы понять, что вообще в ней есть. Применим этот подход не только к фабрике, но и контроллерам, директивам и т.д.

Ответ 2



Просто чтобы была переменная вместо this. Я бы не стал так делать, если в этом нет необходимости.

Ответ 3



По моему написав имя переменной можно повысить читаемость кода, и не нужно будет писать комментарий, хотя в примерах встречал пишут по разному фабрики Я пишу как то так, встретил в примерах мне понравилось gameServices.factory('Content', ['$http', function($http) { var service = function() { this.items = []; }; service.prototype.nextPage = function(callback) { //Тут загрузка контента } return service; } ]);

Комментариев нет:

Отправить комментарий