Запутался с прототипами...
Всем привет!
Наследуется ли свойство прототипа всем объектам? К примеру: function SomeF() { this.name = ""; } SomeF.prototype.IsNamed = false; SomeF.prototype.SetName = function(txt) { this.name = txt; this.IsNamed = true; } var a = new SomeF(); alert(a.IsNamed); a.SetName("AAA"); alert(a.IsNamed); var b = new SomeF(); alert(b.IsNamed); Разве не должна строка 15 выдать true? P.S. пример абстрактный - не придирайтесь :) |
Keramet,
строка 14 создали новый обьект b -- причём тут обьект a? |
рони, А разве свойства прототипа не наследуются всем объектам, созданным от этого прототипа?? (в моём примере - свойство IsNamed).
|
рони, если можете, поясните разницу в этих двух фрагментах:
function SomeF() { this.name = ""; } SomeF.prototype.IsNamed = false; function SomeF() { this.name = ""; this.IsNamed = false; } Я просто считал, что во втором примере свойство IsNamed уникально для каждого объекта; а в первом - все объекты имеют одно и тоже значение, и если в одном объекте свойство изменится - то это изменение касается сразу всех объектов. |
Keramet,
Цитата:
|
:) ок. а они появятся в этом году? И, кстати, кто на форуме считается спецом ООП?
|
Цитата:
в случае примитива оба варианта одинаковы, если обьект то во первом варианте будет один обьект для всех, пусть меня поправят если не так. |
Keramet,
может вам singleton нужен? |
Цитата:
Keramet, значение IsNamed будет уникальным для каждого экземпляра, аналогично public var в классах. Но это не работает для массивов и объектов, так как там значение наследуется по ссылке. function MyClass() { }; MyClass.prototype.foo = []; var a = new MyClass; a.foo.push(123); var b = new MyClass; b.foo.push(456); alert(a.foo == b.foo); |
Цитата:
|
Часовой пояс GMT +3, время: 19:39. |