20.11.2012, 15:16
|
Интересующийся
|
|
Регистрация: 19.05.2008
Сообщений: 10
|
|
И вообще нефиг ко мне придираться я не JS программер, просто мимо проходил посмотреть вопросы на собеседование, т.к. скоро придет пара кандидатов. :о)
|
|
20.11.2012, 15:37
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от Thekostya
|
нефиг ко мне придираться
|
Я не придирался. Считаю правильным публиковать к вопросам - ответы. Иначе эта тема превратиться в мусор.
А так и для обучающихся полезно и себе разминка.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
20.11.2012, 18:22
|
|
Профессор
|
|
Регистрация: 05.06.2009
Сообщений: 1,703
|
|
Цитата:
|
И вообще нефиг ко мне придираться я не JS программер
|
если бы сразу об этом узнать то и придирок бы не было
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
|
|
21.11.2012, 06:57
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Сообщение от Thekostya
|
Если на пальцах то так:
Имеем твои условия:
var a = new Someting, b = new Someting;
Someting.prototype.my_name = 'Jack';
a === b && a.constructor === Someting && b.constructor === Someting && b.my_name == 'Jack'
Читаем описание === для сравнения объектов и отсюда делаем вывод что в результате a и b должны ссылаться на один объект. Нам нужен конструктор, который все время выдает один и тот же объект. Это и есть паттерн Singleton.
function Something() {
if (!Something._inst)
Something._inst=this;
return Something._inst;
}
Как он работает - проверяем переменную "класса" _inst, если пустая, то значит это первый запуск конструктора, присваиваем ей текущий экземпляр this. Если она не пустая то уже хранит ранее созданный, который мы и возвращаем. Таким образом мы создаем 1 экземпляр и в дальнейшем возвращаем всегда его.
|
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.
__________________
29375, 35
|
|
21.11.2012, 10:21
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Aetae
|
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.
|
будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного
|
|
21.11.2012, 17:20
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Сообщение от melky
|
будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного
|
Show me your moves!©
__________________
29375, 35
|
|
21.11.2012, 18:08
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Aetae
|
Show me your moves!©
|
function A () {
var created = this;
A = function () {
return created;
};
}
a = new A();
b = new A();
alert( a === b );
|
|
22.11.2012, 13:12
|
Интересующийся
|
|
Регистрация: 19.05.2008
Сообщений: 10
|
|
Сообщение от Aetae
|
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.
|
В этом и есть фишка синглетона, и а и б при этом будут ссылками на один и тот же объект.
|
|
22.11.2012, 23:10
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Aetae
|
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.
|
var Foo = function() {
return this.constructor; // или Foo, встроенные конструкторы (Array, Date...) и т.д.
};
var a = new Foo;
var b = new Foo;
alert(a === b);
Последний раз редактировалось monolithed, 22.11.2012 в 23:45.
|
|
22.11.2012, 23:39
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от monolithed
|
// или Foo, встроенные объекты (Array, Date...) и т.д.
|
DOM ...
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
|
|