Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Вопросы на собеседованиях (https://javascript.ru/forum/offtopic/31131-voprosy-na-sobesedovaniyakh.html)

Thekostya 20.11.2012 15:16

И вообще нефиг ко мне придираться я не JS программер, просто мимо проходил посмотреть вопросы на собеседование, т.к. скоро придет пара кандидатов. :о)

Gozar 20.11.2012 15:37

Цитата:

Сообщение от Thekostya
нефиг ко мне придираться

Я не придирался. Считаю правильным публиковать к вопросам - ответы. Иначе эта тема превратиться в мусор.

А так и для обучающихся полезно и себе разминка.

Tim 20.11.2012 18:22

Цитата:

И вообще нефиг ко мне придираться я не JS программер
если бы сразу об этом узнать то и придирок бы не было

Aetae 21.11.2012 06:57

Цитата:

Сообщение от Thekostya (Сообщение 216898)
Если на пальцах то так:
Имеем твои условия:
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.

melky 21.11.2012 10:21

Цитата:

Сообщение от Aetae
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.

будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного

Aetae 21.11.2012 17:20

Цитата:

Сообщение от melky (Сообщение 217021)
будет. сли в рез-те вызова с new возвращается другой объект, то он будет использоваться вместо новосозданного

Show me your moves!©

melky 21.11.2012 18:08

Цитата:

Сообщение от Aetae (Сообщение 217129)
Show me your moves!©

function A () {

    var created = this;

    A = function () {
        return created;
    };

}


a = new A();
b = new A();

alert( a === b );

Thekostya 22.11.2012 13:12

Цитата:

Сообщение от Aetae (Сообщение 216990)
Это конечно мило, но только a всё равно никогда не будет === b, ибо new - это таки new.

В этом и есть фишка синглетона, и а и б при этом будут ссылками на один и тот же объект.

monolithed 22.11.2012 23:10

Цитата:

Сообщение от 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);

nerv_ 22.11.2012 23:39

Цитата:

Сообщение от monolithed
// или Foo, встроенные объекты (Array, Date...) и т.д.

DOM ...


Часовой пояс GMT +3, время: 11:21.