43 lines
1.3 KiB
Markdown
43 lines
1.3 KiB
Markdown
Ошибка в строке:
|
||
|
||
```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`, но может содержать и свои свойства, специфичные для кроликов.
|