Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.12.2014, 20:07
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Помогите понять синглтоны
Наткнулся на такой вот пример создания в IO:
Singleton := Object clone 
Singleton clone = Singleton

Насколько я понял, аналогом в JS будет:
Object.prototype.clone=function(){return Object.create(this)}

singleton=Object.clone()
singleton.clone=function(){return singleton}


Не могу врубиться, как это можно использовать, нахер это нужно? Покажите, плз, простенький пример какой-нибудь, игрушечный чтоли. Это уже третья попытка, понять сабж Первые 2 -- неудачны

Все, Sweet объяснил доходчиво, тема закрыта

Последний раз редактировалось krutoy, 19.12.2014 в 21:02.
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2014, 20:39
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

В js это всё не актуально. Ты просто создаёшь объект, как глобальную переменную,
var singleton = {};

и он будет доступен из любых других классов.
singleton актуален для языков, типа C#, где глобальных переменных нет.
Ответить с цитированием
  #3 (permalink)  
Старый 19.12.2014, 20:56
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Sweet,
Понял, спасибо.

Последний раз редактировалось krutoy, 19.12.2014 в 21:01.
Ответить с цитированием
  #4 (permalink)  
Старый 19.12.2014, 21:52
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Sweet
Ты просто создаёшь объект, как глобальную переменную,
var singleton = {};

и он будет доступен из любых других классов.
а нафига так делать? что, при этом это будет экземпляр, который будет наследовать необходимую нам функциональность?

Пример на JavaScript с инкапсуляцией

Цитата:
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр класса с глобальной точкой доступа.
var Singleton = new function() {
	var instance;
 
	// Приватные методы и свойства
	// ...	
 
	// Конструктор
	function Singleton() {
		if ( !instance )
			instance = this;
		else return instance;
 
		// Публичные свойства
	}
 
	// Публичные методы
	Singleton.prototype.test = function() {};
 
	return Singleton;
}
 
console.assert( new Singleton === new Singleton );

Сообщение от krutoy
Все, Sweet объяснил доходчиво, тема закрыта
как будто первый день замужем
Ответить с цитированием
  #5 (permalink)  
Старый 19.12.2014, 22:48
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от bes
что, при этом это будет экземпляр, который будет наследовать необходимую нам функциональность?
Будет, если нужно.
Object.prototype.clone=function(){return Object.create(this)}
 
foo={a: 1}
singleton=foo.clone()
singleton.clone=function(){return singleton}

console.log(
  singleton.clone()===singleton.clone(),
  singleton.a, singleton.clone().a
)
// true 1 1

Я недавно пришел к выводу, что классы в js -- это пятое колесо. Абсолютно все что можно селать с ними -- можно и без них, причем быстрей, лаконичней и прозрачней. Чтобы убедится в этом, достаточно сравнить няшный синглтон в стиле IO и ту вакханалию, которую ты приводишь в качестве примера. Использование классов в js от непонимания сути js.

Последний раз редактировалось krutoy, 19.12.2014 в 22:55.
Ответить с цитированием
  #6 (permalink)  
Старый 19.12.2014, 23:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy
Будет, если нужно. Я недавно пришел к выводу, что классы в js -- это пятое колесо. Абсолютно все что можно селать с ними -- можно и без них, причем быстрей, лаконичней и прозрачней. Чтобы убедится в этом, достаточно сравнить няшный синглтон в стиле IO и ту вакханалию, которую ты приводишь в качестве примера. Использование классов в js от непонимания сути js.
написано же, что пример с инкапусляцией
можешь использовать/не использовать этот паттерн для создания модуля
Ответить с цитированием
  #7 (permalink)  
Старый 20.12.2014, 00:13
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

bes,
это был ответ на
Сообщение от krutoy
что, при этом это будет экземпляр, который будет наследовать необходимую нам функциональность?
Инкапсуляция ортогональна класс-ориентированному интерфейсу, она тут вообще не причем. Инкапсуляцию можно реализовать при любом подходе.
Ответить с цитированием
  #8 (permalink)  
Старый 20.12.2014, 01:25
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy Посмотреть сообщение
bes,
это был ответ на
Инкапсуляция ортогональна класс-ориентированному интерфейсу, она тут вообще не причем. Инкапсуляцию можно реализовать при любом подходе.
это был ответ на
Сообщение от krutoy
Чтобы убедится в этом, достаточно сравнить няшный синглтон в стиле IO и ту вакханалию, которую ты приводишь в качестве примера.

в своём ответе я акцентировал внимание на единственность экземпляра, а не на глобальную точку доступа, как это сделал Sweet, хотя возможно он и предполагал, что объект, созданный литералом и так единственный в своём роде
я также был неточен и вместо "наследовал" хотел сказать "получит", акцентируя внимание на создание объектов не при помощи литералов, но так как в контексте ответа смысл особо не терялся, не стал исправлять
Ответить с цитированием
  #9 (permalink)  
Старый 20.12.2014, 02:00
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

bes, пох ваще. Не в настроение устраивать срачи Но вот это - убожество какое-то. Будто бы "неполноценный" js тянется к "совершенным" собратьям Нафига все эти пляски с new и прототипом. Нужна инкапсуляция? Пожалуйста:
var singleton = (function () {
    var private = "x";
    return {
         getX: function () { return private; }
    };
}());
Классический js-паттерн.
Ответить с цитированием
  #10 (permalink)  
Старый 20.12.2014, 02:21
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Sweet
Классический js-паттерн.
под названием модуль

Сообщение от Sweet
bes, пох ваще. Не в настроение устраивать срачи Но вот это - убожество какое-то. Будто бы "неполноценный" js тянется к "совершенным" собратьям Нафига все эти пляски с new и прототипом. Нужна инкапсуляция? Пожалуйста:
а хз откуда у них пошёл такой стиль, но по-моему все варианты имеют право на жизнь и не настолько убоги как ты преподносишь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ помогите бьюсь уже неделю не магу понять apercot Javascript под браузер 7 06.11.2014 14:08
помогите понять код с замыканием alexandr_poskrobka Общие вопросы Javascript 4 04.10.2012 21:44
помогите уже месяц не могу понять как это сделать... CTEPEOTUn Общие вопросы Javascript 5 13.04.2011 00:21
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Помогите понять куда копать warobushek Общие вопросы Javascript 10 13.05.2010 19:25