Помогите понять синглтоны
Наткнулся на такой вот пример создания в 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 объяснил доходчиво, тема закрыта |
В js это всё не актуально. Ты просто создаёшь объект, как глобальную переменную,
var singleton = {}; и он будет доступен из любых других классов. singleton актуален для языков, типа C#, где глобальных переменных нет. |
Sweet,
Понял, спасибо. |
Цитата:
Пример на JavaScript с инкапсуляцией Цитата:
Цитата:
|
Цитата:
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. |
Цитата:
можешь использовать/не использовать этот паттерн для создания модуля |
bes,
это был ответ на Цитата:
|
Цитата:
Цитата:
в своём ответе я акцентировал внимание на единственность экземпляра, а не на глобальную точку доступа, как это сделал Sweet, хотя возможно он и предполагал, что объект, созданный литералом и так единственный в своём роде я также был неточен и вместо "наследовал" хотел сказать "получит", акцентируя внимание на создание объектов не при помощи литералов, но так как в контексте ответа смысл особо не терялся, не стал исправлять :) |
bes, пох ваще. Не в настроение устраивать срачи:) Но вот это - убожество какое-то. Будто бы "неполноценный" js тянется к "совершенным" собратьям:D Нафига все эти пляски с new и прототипом. Нужна инкапсуляция? Пожалуйста:
var singleton = (function () { var private = "x"; return { getX: function () { return private; } }; }());Классический js-паттерн. |
Цитата:
Цитата:
|
Sweet,
>> пишет var singleton = (function () {... >> использует шаблон "модуль" Классика) |
Часовой пояс GMT +3, время: 23:03. |