'функция cat' - это просто функция. Его прототипом является пустой объект ({}). «Новый кот» можно вызвать, чтобы добавить имя пользователя и «поговорить» с новым объектом. Под этим новым объектом будет прототип функции, который все еще {}.
var c= new cat('Tiddles');
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: {}
Теперь, когда вы пишете «cat.prototype.talk», вы добавляете пользователей к тому, лежащей в основе объекта:
c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} }
c inherited: { 'talk': function() {...} }
Функция «говорить» прямо на экземпляра «с» принимает приоритет над «разговором», установленный косвенно на прототипе конструктора c.
Итак, вы смешали два стиля наследования здесь, этот метод присваивания и метод прототипа.
Методы написания прототипов имеют то преимущество, что вы не получаете избыточных копий одних и тех же членов, скопированных в каждый экземпляр объекта; Преимущество написания экземпляров в том, что оно решает проблему связанных методов. Какой вы выбираете, зависит от вас, но не смешивайте их. Если вы хотите пройти прототип маршрута, на «это» должно быть записано только «имя», потому что это единственное свойство, специфичное для каждого экземпляра.