Я пытаюсь понять, как работает система классов прототипов в JS.Пока что я немного озадачен результатами, которые я получил после создания и отображения объектов (в Firefox).Когда я создаю объект, используя «Пример 1», я получаю объект, у прототипа которого есть одно свойство (функция речи), и у которого есть свойство экземпляра «тип».И это поведение понятно.Но во втором примере, используя ключевое слово 'new', я получил объект со свойством экземпляра 'type' и прототип, у которого есть сам конструктор (Rabbit) и определенная функция 'speak'.И эта функция «говорить» имеет непустое свойство «прототип», и это отношение идет дальше и т. Д. То же самое с конструктором прототипа.Его конструктор имеет свойство «prototype», содержащее то же содержимое, что и предыдущий уровень и т. Д.И это поведение кажется бесконечным деревом рекурсии.Я не понимаю, является ли такое поведение обычным языком "фича"?
// Example 1
let protoRabbit = {
speak(line) {
console.log(`The ${this.type} rabbit says '${line}'`);
}
};
function makeRabbit(type) {
let rabbit = Object.create(protoRabbit);
rabbit.type = type;
return rabbit;
}
// Example 2
function Rabbit(type) {
this.type = type;
}
Rabbit.prototype.speak = function(line) {
console.log(`The ${this.type} rabbit says '${line}'`);
};
let weirdRabbit = new Rabbit("weird");
console.log(weirdRabbit);