Запутался с прототипами...
Всем привет!
Наследуется ли свойство прототипа всем объектам? К примеру:
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:16. |