Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.09.2011, 18:27
Новичок на форуме
Отправить личное сообщение для Kinoman Посмотреть профиль Найти все сообщения от Kinoman
 
Регистрация: 23.09.2011
Сообщений: 2

Баг в реализации наследования.
Здравствуйте!

Есть следующая, наверняка знакомая вам реализация наследования:

function inherit(Child, Parent) {
  var temp = new Parent();
  for(var p in temp) if(temp.hasOwnProperty(p)) delete temp[p];
  Child.prototype = temp;
  Child.constructor = Child;
}


и вот такой пример её использования:

function Tool(name, src) {
  this.id = name;
  this.src = src; 
}

inherit(Tool, Image);

var o = new Tool("tool1", "/.../arr-right.png");
document.body.appendChild(o);
var o1 = new Tool("tool2", "/.../arr-left.png");
document.body.appendChild(o1);


В итоге получается ОДИН объект с именем tool2 и соурсом arr-left.png. Т.е. свойства id и src каким-то образом попали в прототип к Tool.

Пожалуйста, объясните, почему так случилось.

Спасибо.

Последний раз редактировалось Kinoman, 23.09.2011 в 18:39.
Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2011, 19:35
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

function inherit(Child, Parent) {
  var temp = new Parent();
  for(var p in temp) if(temp.hasOwnProperty(p)) delete temp[p];
  Child.prototype = temp;
  Child.constructor = Child;
}

function Tool(name, src) {
  this.id = name;
  this.src = src; 
}

inherit(Tool, Image);

var o = new Tool("tool1", "/.../arr-right.png");
var o1 = new Tool("tool2", "/.../arr-left.png");

alert([[o.id, o.src], [o1.id, o1.src]].join('\n'))
Ответить с цитированием
  #3 (permalink)  
Старый 23.09.2011, 20:16
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

А ничего, что это только в firefox работает?
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2011, 20:22
Новичок на форуме
Отправить личное сообщение для Kinoman Посмотреть профиль Найти все сообщения от Kinoman
 
Регистрация: 23.09.2011
Сообщений: 2

Да дело не в этом (хотя работает это в FF и Opera, но не в IE), дело в том, что есть какой-то баг в моем понимании наследования. Мне важно понять принцип. По идее , свойства id и src должны быть для каждого объекта o и o1 свои, однако, такое впечатление, что они попали в прототип к Tool, но как это произошло, и как этого избежать... Объясните, пожалуйста.

Я просто хочу научиться делать собственные объекты на основе встроенных, вызывая свой конструктор с new.

Последний раз редактировалось Kinoman, 23.09.2011 в 20:24. Причина: Дополнение
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с доработкой JS, исправить 1 баг, можно даже за $ Kanzaki Элементы интерфейса 18 14.09.2011 21:21
Очередной баг jQuery? monolithed jQuery 8 27.01.2011 10:16
Как исправить баг с выпадающим js-меню? Cammerariy Javascript под браузер 5 02.12.2010 19:25
Забавный баг (фича?) в Chrome / Safari Cr@ZyBoY Opera, Safari и др. 11 22.02.2010 17:26
Баг с jpeg в ie6 JsLoveR Элементы интерфейса 20 28.01.2010 20:57