@lotrop

Javascript не могу понять логики наследования?

Вот есть один код
function inherit(proto) {
  function F() {}
  F.prototype = proto;
  var object = new F;
  return object;
}

Вот второй:
function extend(Child, Parent) {
    var F = function() { }
    F.prototype = Parent.prototype
    Child.prototype = new F()
    Child.prototype.constructor = Child
    Child.superclass = Parent.prototype
}

Оба они реализуют возможность наследования. Но мне не понятен один момент: Почему в первом варианте :
F.prototype = proto;
, а во втором:
F.prototype = Parent.prototype
В чем разница в этих подходах.
Я до сих пор не могу понять почему мы пишем
F.prototype = Parent.prototype
, то есть мы говорим, я хочу объекту F поставить родителя, который будет родителем Parent. Зачем для F делать родителем родителя Parent. По хорошему счету Parent.prototype для F будет дедушкой. С моим классический пониманием ООП не могу этого понять, а как данность, пока не пойму не приму(
  • Вопрос задан
  • 386 просмотров
Пригласить эксперта
Ответы на вопрос 2
prototype - это не родитель. Это класс объекта.
Во втором случае мы делаем пустой конструктор, затем говорим что этот конструктор делает объекты Parent класса.
После этого мы создаем объект, у которого в прототипе все из класса родителя унаследованно.
После этого мы меняем ссылку на конструктор прототипа, чтобы она соответствовала объекту.
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
1й вариант принимает прототип родителя в параметре и возвращает отнаследованный прототип, что Вы будете с ним делать полностью на Вашей совести
2й вариант принимает 2 конструктора и делает относительно правильное наследование
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы