Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.01.2016, 23:41
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Keramet Посмотреть сообщение
Яростный Меч,
заменять, я так понял, не надо. Надо именно дописать. Т.е. чтобы b == a надо вернуть какой-то глобальный объект?
Глобальный или из текущего скоупа. Тут идея в том, что если функция возвращает обект, то он и будет результатом new
Ответить с цитированием
  #12 (permalink)  
Старый 16.01.2016, 00:23
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от Яростный Меч Посмотреть сообщение
Глобальный или из текущего скоупа...
С глобальными вроде понятно (Date, Math, ...) А можете привести пример объекта из текущего скоупа (для этого примера)? Что, кроме глоб. объекта, можно вернуть, чтобы a==b?
Ответить с цитированием
  #13 (permalink)  
Старый 16.01.2016, 00:36
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Сообщение от Keramet Посмотреть сообщение
Lemme,
я это понимаю. это типа пример на собеседовании. Дано:
var a = new F();
var b = new F();
alert(a == b);
function F() {};

сделать так, чтобы a == b выдавало true.
Надо код ниже дописать, чтобы a == b. Вот я и хочу понять, такое можно реализовать?
Я думал что-то типа
F.prototype.valueOf  = function() { return 1; }  // ну или, к примеру,  true

дописать. Ведь при операции нестрого равенства происходит преоб-е типов, если один из операндов объект - то он приводится к примитиву с использованием valueOf(). НО что-то не работает
Keramet, два разных объекта при сравнении не могут давать true. В чем заключается твоя задача? Сделать a == b?

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

function F() {
  this.value = 1;
  this.valueOf = function() {
    return this.value;
  };
}

alert(a == b);
Ответить с цитированием
  #14 (permalink)  
Старый 16.01.2016, 01:45
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Может быть я не в тему, но у меня отчетливое ощущение того что автор не так понял задачу. Судя по тому что это задача была на собеседовании скорее всего хотели просто получить пример реализации синглтона. Простите если я не прав. Глупо спрашивать на собеседовании хаки и тонкости типа valueOf, обычно стоит задача выяснить владение паттернами и умение их применять, аогоритмирование и прочее. Я не имею в виду что не надо знать про то как работает valueOf и toString, просто механизмы приведения типов в js иногда чудят, но при этом это не мешает людям которые не знают этих тонкостей писать на js хорошо и красиво. Просто не всем приходит в голову сравнивать данные разных типов)

var F = (function () {

  var instance;

  var F = function () {
     if (instance) return instance;
     instance = this;
  };

  return F;
})();

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

alert(a === b);
alert(a == b);

Последний раз редактировалось tsigel, 16.01.2016 в 02:10.
Ответить с цитированием
  #15 (permalink)  
Старый 16.01.2016, 06:27
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

function F() {
	if(this instanceof F) {
		if(!F.prototype._self) {
			F.prototype._self = this;
		}
		return F.prototype._self;
	}
}

var a = new F;
var b = new F;

alert(a === b);

alert(a instanceof F);

alert(b instanceof F);

Последний раз редактировалось ruslan_mart, 16.01.2016 в 06:31.
Ответить с цитированием
  #16 (permalink)  
Старый 16.01.2016, 09:05
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

var F = function that () {
    var self = this;
    F = function () { return self}
    that.prototype.constructor = F;
    F.prototype = that.prototype;
}


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


alert(a === b)

Последний раз редактировалось caetus, 16.01.2016 в 09:17.
Ответить с цитированием
  #17 (permalink)  
Старый 16.01.2016, 12:02
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Keramet Посмотреть сообщение
С глобальными вроде понятно (Date, Math, ...) А можете привести пример объекта из текущего скоупа (для этого примера)? Что, кроме глоб. объекта, можно вернуть, чтобы a==b?
Да хотя бы саму функцию F
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Небольшая задачка с PHP + Ajax. Urukhay Общие вопросы Javascript 6 13.09.2014 17:42
Задачка: Хром / Мозилла? eirnvn Opera, Safari и др. 0 09.07.2013 13:18
простенькая функция для парсинга ID Yurik Общие вопросы Javascript 4 23.02.2012 22:37
задачка по геометрии js lammeR Общие вопросы Javascript 16 02.02.2011 16:01
Небольшая задачка Maksim jQuery 4 30.09.2009 19:43