Простенькая задачка, а я туплю... :(
var a = new F(); var b = new F(); alert(a == b); function F() {}; Сделать так, чтобы a == b возвращало true. |
|
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(). НО что-то не работает :( |
var a = new F(); var b = new F(); function F() {}; F.prototype.valueOf = function() { return 1; }; alert(a == 1); // true alert(b == 1); // true alert(b == a); // false Неужели не возможно, чтобы alert(b == a) дал true, если и a, и b == 1? |
function F() { return Date; }
|
А, я разобрался, вопрос снят - такое сделать нельзя!
Равенство (==) |
Цитата:
|
Яростный Меч,
работает )) |
Заменить точно можно, дописать - вроде тоже
|
Яростный Меч,
заменять, я так понял, не надо. Надо именно дописать. Т.е. чтобы b == a надо вернуть какой-то глобальный объект? |
Цитата:
|
Цитата:
|
Цитата:
var a = +new F(), b = +new F(); function F() { this.value = 1; this.valueOf = function() { return this.value; }; } alert(a == b); |
Может быть я не в тему, но у меня отчетливое ощущение того что автор не так понял задачу. Судя по тому что это задача была на собеседовании скорее всего хотели просто получить пример реализации синглтона. Простите если я не прав. Глупо спрашивать на собеседовании хаки и тонкости типа 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); |
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); |
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) |
Цитата:
|
Часовой пояс GMT +3, время: 10:37. |