This commit is contained in:
Ilya Kantor 2016-11-14 23:41:18 +03:00
parent f99574f53b
commit b0976b5253
153 changed files with 590 additions and 533 deletions

View file

@ -0,0 +1,18 @@
Ошибка -- в том, что метод `walk` присваивается в конструкторе `Animal` самому объекту вместо прототипа.
Поэтому, если мы решим перезаписать этот метод своим, специфичным для кролика, то он не сработает:
```js
// ...
// записывается в прототип
Rabbit.prototype.walk = function() {
alert( "прыгает " + this.name );
};
```
Метод `this.walk` из `Animal` записывается в сам объект, и поэтому он всегда будет первым, игнорируя цепочку прототипов.
Правильно было бы определять `walk` как `Animal.prototype.walk`.
Тем более, что этот метод является общим для всех объектов, тратить память и время на запись его в каждый конструктор определённо ни к чему.

View file

@ -0,0 +1,31 @@
importance: 5
---
# В чём ошибка в наследовании
Найдите ошибку в прототипном наследовании. К чему она приведёт?
```js run
function Animal(name) {
this.name = name;
this.walk = function() {
alert( "ходит " + this.name );
};
}
function Rabbit(name) {
Animal.apply(this, arguments);
}
Rabbit.prototype = Object.create(Animal.prototype);
Rabbit.prototype.walk = function() {
alert( "прыгает " + this.name );
};
var rabbit = new Rabbit("Кроль");
rabbit.walk();
```