Помогите понять синглтоны
Наткнулся на такой вот пример создания в 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, время: 01:54. |