Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Баг в реализации наследования. (https://javascript.ru/forum/misc/21777-bag-v-realizacii-nasledovaniya.html)

Kinoman 23.09.2011 18:27

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

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

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.

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

Спасибо.

B@rmaley.e><e 23.09.2011 19:35

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

Sweet 23.09.2011 20:16

А ничего, что это только в firefox работает?

Kinoman 23.09.2011 20:22

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

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


Часовой пояс GMT +3, время: 04:39.