up
This commit is contained in:
parent
f99574f53b
commit
b0976b5253
153 changed files with 590 additions and 533 deletions
|
@ -0,0 +1,18 @@
|
|||
Ошибка -- в том, что метод `walk` присваивается в конструкторе `Animal` самому объекту вместо прототипа.
|
||||
|
||||
Поэтому, если мы решим перезаписать этот метод своим, специфичным для кролика, то он не сработает:
|
||||
|
||||
```js
|
||||
// ...
|
||||
|
||||
// записывается в прототип
|
||||
Rabbit.prototype.walk = function() {
|
||||
alert( "прыгает " + this.name );
|
||||
};
|
||||
```
|
||||
|
||||
Метод `this.walk` из `Animal` записывается в сам объект, и поэтому он всегда будет первым, игнорируя цепочку прототипов.
|
||||
|
||||
Правильно было бы определять `walk` как `Animal.prototype.walk`.
|
||||
|
||||
Тем более, что этот метод является общим для всех объектов, тратить память и время на запись его в каждый конструктор определённо ни к чему.
|
|
@ -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();
|
||||
```
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue