bootd
@bootd
Гугли и ты откроешь врата знаний!

Какая разница между патернами?

Привет, ребята. Тут у меня на работе заметил, в разных местах код описан разными патернами, вот 1й:
'use strict';

var App = (function(){

	return {
		method1: function(){

			return this;

		},

		method2: function(){
			
			return this;

		}
	}

})();

$(function(){

	App
		.method1()
		.method2();

});


Вот 2й:
'use strict';

var App = function(){
	
};


App.prototype = {
	method1: function(){

		return this;

	},

	method2: function(){
		
		return this;

	}

};

$(function(){

	var App = new App();

	App
		.method1()
		.method2();

});


В чём у них принципиально разница? Первый - это патерн модуль, 2й создание классов, через конструктор. Но структурно они одинаковы и с виду делают одно и тоже.

Могли бы вы объяснить мне, если не затруднит подробнее, в чём разница между ними? Буду очень признателен
  • Вопрос задан
  • 1344 просмотра
Пригласить эксперта
Ответы на вопрос 2
kurtov
@kurtov
Во втором случае вызовы
var App1 = new App();
var App2 = new App();
создадут два разных объекта.
Первый случай гарантирует что на странице будет только один App.
Также есть разница в производительности, т.к. прямой вызов метода быстрее, чем поиск и вызов в прототипе - разница очень мала, но в критических местах может быть ощутимой
$(function(){

  // Для первого способа можно изменять объект, зная что эти изменения видны всем
  App.prop1 = true;

  // Для прототипов изменения App1 не отражаются родительском App
  var App1 = new App();
  App1.prop1 = true;

});
$(function(){

  // Для первого случая есть изменения
  console.log(App.prop1); // true

  // Для второго случая создается новый потомок, который ничего не знает о других потомках
  var App1 = new App();
  console.log(App.prop1); // undefined

});
Ответ написан
Комментировать
uaKorona
@uaKorona
Front-End разработчик
Если вам нужен всего один и единственный App - то используйте модуль.
А если у вас набор из разных App - то их как раз правильно будет создавать в виде экземпляров класса App.
Вас скорее всего смутило, что и в первом и втором примере - методы описаны одинаково ) Но паттерны, как таковые овершенно разные и служат разным целям
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы