|
15.01.2016, 23:41
|
Профессор
|
|
Регистрация: 12.04.2010
Сообщений: 557
|
|
Сообщение от Keramet
|
Яростный Меч,
заменять, я так понял, не надо. Надо именно дописать. Т.е. чтобы b == a надо вернуть какой-то глобальный объект?
|
Глобальный или из текущего скоупа. Тут идея в том, что если функция возвращает обект, то он и будет результатом new
|
|
16.01.2016, 00:23
|
Профессор
|
|
Регистрация: 30.12.2015
Сообщений: 194
|
|
Сообщение от Яростный Меч
|
Глобальный или из текущего скоупа...
|
С глобальными вроде понятно ( Date, Math, ...) А можете привести пример объекта из текущего скоупа (для этого примера)? Что, кроме глоб. объекта, можно вернуть, чтобы a==b?
|
|
16.01.2016, 00:36
|
Профессор
|
|
Регистрация: 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);
|
|
16.01.2016, 01:45
|
Профессор
|
|
Регистрация: 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.
|
|
16.01.2016, 06:27
|
|
Профессор
|
|
Регистрация: 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.01.2016, 09:05
|
Профессор
|
|
Регистрация: 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.
|
|
16.01.2016, 12:02
|
Профессор
|
|
Регистрация: 12.04.2010
Сообщений: 557
|
|
Сообщение от Keramet
|
С глобальными вроде понятно (Date, Math, ...) А можете привести пример объекта из текущего скоупа (для этого примера)? Что, кроме глоб. объекта, можно вернуть, чтобы a==b?
|
Да хотя бы саму функцию F
|
|
|
|