This commit is contained in:
Ilya Kantor 2016-08-05 16:53:08 +03:00
parent 4c531b5ae7
commit d4c714cbe1
261 changed files with 7370 additions and 546 deletions

View file

@ -0,0 +1,43 @@
Ошибка в строке:
```js
Rabbit.prototype = Animal.prototype;
```
Эта ошибка приведёт к тому, что `Rabbit.prototype` и `Animal.prototype` -- один и тот же объект. В результате методы `Rabbit` будут помещены в него и, при совпадении, перезапишут методы `Animal`.
Получится, что все животные прыгают, вот пример:
```js run no-beautify
function Animal(name) {
this.name = name;
}
Animal.prototype.walk = function() {
alert("ходит " + this.name);
};
function Rabbit(name) {
this.name = name;
}
*!*
Rabbit.prototype = Animal.prototype;
*/!*
Rabbit.prototype.walk = function() {
alert("прыгает! и ходит: " + this.name);
};
*!*
var animal = new Animal("Хрюшка");
animal.walk(); // прыгает! и ходит Хрюшка
*/!*
```
Правильный вариант этой строки:
```js
Rabbit.prototype = Object.create(Animal.prototype);
```
Если так написать, то в `Rabbit.prototype` будет отдельный объект, который прототипно наследует от `Animal.prototype`, но может содержать и свои свойства, специфичные для кроликов.

View file

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