Skip to content

Instantly share code, notes, and snippets.

@motionrus
Created August 20, 2018 10:36
Show Gist options
  • Save motionrus/81bb1c5c55c9007974d51e443393cadb to your computer and use it in GitHub Desktop.
Save motionrus/81bb1c5c55c9007974d51e443393cadb to your computer and use it in GitHub Desktop.
//от родителя Животное, которе имеет свойство имя и скорость, и метод который задает скорость.
// Унаследовать все свойства и методы Слону и расширить метод скорость добавив ему фору
function Animal(name) {
this.name = name;
this.speed = 0;
}
Animal.prototype.run = function (speed) {
this.speed += speed;
};
Animal.prototype.stop = function () {
this.speed = 0
};
function Elephan(name) {
Animal.apply(this, arguments)
}
Elephan.prototype = Object.create(Animal);
Elephan.prototype.constructor = Elephan;
Elephan.prototype.run = function (speed) {
Animal.prototype.run.apply(this, arguments);
this.speed += 10
};
elephan = new Elephan('Murzik');
elephan.run(100);
elephan.run(100);
console.dir(elephan);
@motionrus
Copy link
Author

Может я чего-то не понимаю, но мой код (https://goo.gl/eYkJHR) выводит prototype и proto для объекта Elephan, я почему то думал что это одно и тоже. Получается что могут встречаться объекты у которых и proto и prototype одновременно?
image

@Ibadichan
Copy link

2018-08-20 15 08 30
дело вот в чем:
у любого консткуктора есть свойство prototype и оно будет выводиться всегда, но также у любого объекта/массива/функции есть proto который равен Function.prototype/Object.prototype/Array.prototype.
это я тебе показал в скриншоте. У меня в prototype записан something, но если посмотреть на proto то там есть apply, bind и другие методы.

и у тебя очень грубая ошибка:
Elephan.prototype = Object.create(Animal);
а нужно так:
Elephan.prototype = Object.create(Animal.prototype);
лучше перечитай еще раз главу.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment