Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2014, 14:16
Новичок на форуме
Отправить личное сообщение для Kosanna Посмотреть профиль Найти все сообщения от Kosanna
 
Регистрация: 02.12.2014
Сообщений: 2

Простая задачка на идентичность объектов
Пожалуйста, подскажите, как решить вот такую задачку:

// Заставьте это работать
function Dummy() {
    // что-то тут нужно написать
}

Dummy.prototype.value = 'dummy';

Dummy.prototype.setValue = function (value) {
    this.value = value;
};

Dummy.prototype.getValue = function () {
    return this.value;
};

// Используем
var foo = new Dummy();
var bar = new Dummy();

bar.setValue(123);

// Тесты
console.log('-------------------');
console.info('foo === bar ->', foo === bar); // true
console.log('values:', [foo.getValue(), bar.getValue()]); // [123, 123]

// Bonus level
//baz = Dummy();
//console.info('baz === bar ->', baz === bar, baz.getValue()); // true, 123
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2014, 14:32
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

глубоко не вчитываясь:
1. Dummy - синглтон
2. либо переопределить valueOf
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 02.12.2014, 14:51
Новичок на форуме
Отправить личное сообщение для Kosanna Посмотреть профиль Найти все сообщения от Kosanna
 
Регистрация: 02.12.2014
Сообщений: 2

Точно, синглтон, гениально! Спасибо!

Последний раз редактировалось Kosanna, 02.12.2014 в 14:56.
Ответить с цитированием
  #4 (permalink)  
Старый 02.12.2014, 15:01
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от Kosanna
console.info('foo === bar ->', foo === bar); // true
и при этом
var foo = new Dummy();
var bar = new Dummy();

Это невозможно в принципе. 2 разных объекта не могут быть одним и тем же. Насчет второго я не допер. Вы хотите, чтобы все экземпляры наследовали от класса, и меняли свойство класса, а не свое собственное?

Последний раз редактировалось krutoy, 02.12.2014 в 15:16.
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2014, 22:48
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

// Заставьте это работать
  var Dummy = new function Dummy() {
      var instance;
      this.value = 'dummy';

      function Dummy() {
        if (!instance) instance = this;
        else return instance;

        Dummy.prototype.setValue = function (value) {
          this.value = value;
        };

        Dummy.prototype.getValue = function () {
          return this.value;
        };
      }
      return Dummy;
    }



    // Используем
  var foo = new Dummy();
  var bar = new Dummy();

  bar.setValue(123);

  // Тесты
  console.log('-------------------');
  console.info('foo === bar ->', foo === bar); // true
  console.log('values:', [foo.getValue(), bar.getValue()]); // [123, 123]
  // Bonus level
  baz = Dummy();
  console.info('baz === bar ->', baz === bar, baz.getValue()); // true, 123
Ответить с цитированием
  #6 (permalink)  
Старый 02.12.2014, 23:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,053

Сообщение от Kosanna
// что-то тут нужно написать

// Заставьте это работать
function Dummy() {     // что-то тут нужно написать
    if (!arguments.callee.instance) {
        arguments.callee.instance = {
            setValue: this.setValue,
            getValue: this.getValue
        };
    }
    return arguments.callee.instance;

}

Dummy.prototype.value = 'dummy';

Dummy.prototype.setValue = function (value) {
    this.value = value;
};

Dummy.prototype.getValue = function () {
    return this.value;
};

// Используем
var foo = new Dummy();
var bar = new Dummy();

bar.setValue(123);

// Тесты

alert('foo === bar ->'+ (foo === bar)); // true
alert('values:'+ [foo.getValue(), bar.getValue()]); // [123, 123]

// Bonus level
baz = Dummy();
alert('baz === bar ->'+ [baz === bar, baz.getValue()]); // true, 123
Ответить с цитированием
  #7 (permalink)  
Старый 02.12.2014, 23:56
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Еще вариант
/// Заставьте это работать
function Dummy() {     // что-то тут нужно написать
    if (Dummy.prototype.instance) {
         return Dummy.prototype.instance;
    }
    Dummy.prototype.instance = this;

}

Dummy.prototype.value = 'dummy';

Dummy.prototype.setValue = function (value) {
    this.value = value;
};

Dummy.prototype.getValue = function () {
    return this.value;
};

// Используем
var foo = new Dummy();
var bar = new Dummy();

bar.setValue(123);

// Тесты

alert('foo === bar ->'+ (foo === bar)); // true
alert('values:'+ [foo.getValue(), bar.getValue()]); // [123, 123]

// Bonus level
baz = Dummy();
alert('baz === bar ->'+ [baz === bar, baz.getValue()]); // true, 123

и так
if (arguments.callee._singletonInstance) return arguments.callee._singletonInstance;
arguments.callee._singletonInstance = this;

Последний раз редактировалось Vlasenko Fedor, 03.12.2014 в 00:10.
Ответить с цитированием
  #8 (permalink)  
Старый 03.12.2014, 03:53
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

// Заставьте это работать
function Dummy() {
    if (!Dummy.cache)  Dummy.cache = Object.create( Dummy.prototype );
    return Dummy.cache;
}

Dummy.prototype.value = 'dummy';

Dummy.prototype.setValue = function (value) {
    this.value = value;
};

Dummy.prototype.getValue = function () {
    return this.value;
};

// Используем
var foo = new Dummy();
var bar = new Dummy();

bar.setValue(123);

// Тесты
//console.log('-------------------');
console.info('foo === bar ->', foo === bar); // true
console.log('values:', [foo.getValue(), bar.getValue()]); // [123, 123]

// Bonus level
baz = Dummy();
console.info('baz === bar ->', baz === bar, baz.getValue()); // true, 123
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая задачка со списком select Malkis Общие вопросы Javascript 3 03.02.2013 08:24
Как найти точки соприкосновения двух объектов в RaphaelJS Fatalityap Библиотеки/Тулкиты/Фреймворки 3 03.08.2012 16:33
Простая задачка Nanto Элементы интерфейса 6 08.09.2011 15:19
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28