Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.12.2015, 19:45
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Запутался с прототипами...
Всем привет!
Наследуется ли свойство прототипа всем объектам?
К примеру:

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. пример абстрактный - не придирайтесь
Ответить с цитированием
  #2 (permalink)  
Старый 31.12.2015, 20:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
строка 14 создали новый обьект b -- причём тут обьект a?
Ответить с цитированием
  #3 (permalink)  
Старый 31.12.2015, 20:06
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

рони, А разве свойства прототипа не наследуются всем объектам, созданным от этого прототипа?? (в моём примере - свойство IsNamed).

Последний раз редактировалось Keramet, 31.12.2015 в 20:09.
Ответить с цитированием
  #4 (permalink)  
Старый 31.12.2015, 20:08
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

рони, если можете, поясните разницу в этих двух фрагментах:

function SomeF() {
  this.name = "";
}
SomeF.prototype.IsNamed = false;


function SomeF() {
  this.name = "";
  this.IsNamed = false;
}

Я просто считал, что во втором примере свойство IsNamed уникально для каждого объекта; а в первом - все объекты имеют одно и тоже значение, и если в одном объекте свойство изменится - то это изменение касается сразу всех объектов.

Последний раз редактировалось Keramet, 31.12.2015 в 20:26.
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2015, 20:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
Сообщение от Keramet
поясните разницу
лучше подождать специалистов ооп
Ответить с цитированием
  #6 (permalink)  
Старый 31.12.2015, 20:23
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

ок. а они появятся в этом году? И, кстати, кто на форуме считается спецом ООП?
Ответить с цитированием
  #7 (permalink)  
Старый 31.12.2015, 20:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Сообщение от Keramet
кто на форуме считается спецом ООП?
foo сейчас это ник callbackhell
в случае примитива оба варианта одинаковы, если обьект то во первом варианте будет один обьект для всех, пусть меня поправят если не так.
Ответить с цитированием
  #8 (permalink)  
Старый 31.12.2015, 20:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,080

Keramet,
может вам singleton нужен?
Ответить с цитированием
  #9 (permalink)  
Старый 31.12.2015, 20:49
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от рони
foo сейчас это ник callbackhell
Это шутка?

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);

Последний раз редактировалось ruslan_mart, 31.12.2015 в 20:53.
Ответить с цитированием
  #10 (permalink)  
Старый 31.12.2015, 21:46
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Сообщение от рони Посмотреть сообщение
...
в случае примитива оба варианта одинаковы, если обьект то во первом варианте будет один обьект для всех, пусть меня поправят если не так.
если один объект для всех (как и я думал), почему тогда в моём примере выдаёт false ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с прототипами demoniqus Общие вопросы Javascript 1 24.10.2014 15:32
работа с прототипами. Ruzarh AJAX и COMET 7 16.08.2013 11:05
помогите разобраться с прототипами Seran4ek Общие вопросы Javascript 5 11.03.2013 17:31
Немогу поставить условие, запутался nemo Серверные языки и технологии 1 30.01.2010 14:18
совсем уже запутался с тонкостями micscr (X)HTML/CSS 3 23.01.2010 17:32