ArtemSmirnov
@ArtemSmirnov

Прототипы JavaScript [Решено, все так печально]

var Class = function () {};
Class.prototype = {
    attr : {}
};

var foo = new Class,
    bar = new Class;

foo != bar //Хорошо
foo.attr == bar.attr //o_O



Немного подумав я понял что вполне логично что в прототипе ссылка на объект, но есть-ли какой-нибудь способ обойти данное недоразумение, не создавая attr прямо из конструктора, огромная просьба не предлагайте создание через конструктор и не пишите что это единственно решение, т.к. если других не будет то это будет логично.
  • Вопрос задан
  • 2675 просмотров
Решения вопроса 1
azproduction
@azproduction
Создавайте разные прототипы или объявляйте ownProperty attr в конструкторе иначе никак. Логично, что foo.attr === bar.attr потому как оба они ссылаются на Class.prototype.attr
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
taliban
@taliban
php программист
Вообще, это типичное поведение прототипа, он один для всех кто в цепочке за ним. Может Вы лучше обьясните что хотите?
String.prototype.q = 5;
q = "";
w = «w»;

console.log(q != w);
console.log(q.q == w.q);
Ответ написан
Комментировать
homm
@homm
foo.attr === bar.attr потому что foo.attr это foo.__proto__.attr, а foo.__proto__ === bar.__proto__. Когда вы делаете присваивание foo.attr = {}, foo.attr перестает быть foo.__proto__.attr.
Ответ написан
AmdY
@AmdY
PHP и прочие вебштучки
кстати, у вас типичная js ошибка с var и несколькими переменными через запятую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы