Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Создание идентичных объектов(псевдо) (https://javascript.ru/forum/misc/57449-sozdanie-identichnykh-obektov-psevdo.html)

bigkrp 04.08.2015 11:35

Создание идентичных объектов(псевдо)
 
Здравствуйте, столкнулся с интересной для себя задачей.
Возможно ли выполнить след условия:

var a = new F();
var b = F();

a instanceof F //true(*)
b instanceof F //true(**)

a==b//true (***)

т.е. (*) и (**) я знаю как решить используя такой шаблон
var F = function(){
  if(!(this instanceof F)){
    return new F();
  }
};


а вот с (***) загвоздка. Еще ньюанс, что решение должно быть в теле конструктора F

рони 04.08.2015 12:02

bigkrp,
два разных обьекта не могут быть равны друг другу -- либо пишите свою функцию сравнения.

bigkrp 05.08.2015 08:41

Это я понимаю.
Я думал как-то возвращать ссылку на объект, который будет создан в теле конструктора, но как-то пока не сообразил как это сделать, что бы при этом выполнялись (**) и (*)

bigkrp 25.08.2015 10:38

Нашел решение в книге с Шаблонами, вдруг кому понадобится, мне вот на собеседовании задавали.
Шаблон называется singletone посредством конструктора

function F(){
  var instance;
  
  F = function F(){
    return instance;
  }
  
  F.prototype = this;
  
  instance = new F();
  
  instance.constructor = F; // опционально
  
  return instance;
}

var a = new F();
var b = F();

console.log(a instanceof F); // true
console.log(b instanceof F); // true
console.log(a == b); // true


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