JavaScript

Цепочка наследования классов (подробности внутри)

Всем привет! =)

На картинке приведен код.
В строке 15 происходит наследование.
Вопрос: Почему, при этом, не возникает ошибка?
Ведь:
1) Не вызывается родительский конструктор
2) Помимо того, что он не вызывается так еще ему необходимы параметры для работы, в случае если он вызывается пустой.
Не могу понять как оно, вот так вот, всё работает=)

Заранее спасибо за ответы!
Валера Окунев
Валера Окунев
68 766
// Расширения в прототипах
let Person = {
getGreeting() {
return 'Hello';
}
}

let Dog = {
getGreeting() {
return 'Woof!';
}
}

// прототип - person
let friend = Object.create( Person );
console.log( friend.getGreeting()); // 'Hello'
console.log( Object.getPrototypeOf( friend ) === Person ); // true

// сменить прототип на Dog
Object.setPrototypeOf( friend, Dog );
console.log( friend.getGreeting()); // 'Woof!'
console.log( Object.getPrototypeOf( friend ) === Dog ); // true

// Простой доступ к прототипу с помощью ссылки super
let person = {
getGreeting() {
return 'Hello';
}
}

let dog = {
getGreeting() {
return 'Woof!';
}
}

let friend2 = {
getGreeting() {
// ES5
// this в данном случаем будет ссылкой на прототип объекта person.
// return Object.getPrototypeOf( this ).getGreeting.call( this ) + ', hi!';

// ES6
// Выражаясь простым языком, super - это указатель на текущий прототип объекта, фактически это значение Object.getPrototypeOf( this ).
return super.getGreeting() + ', hi!';
}
}

// сменить прототип на person
Object.setPrototypeOf( friend2, person );
console.log( friend2.getGreeting()); // Hello, hi!

console.log( Object.getPrototypeOf( friend2 ) === person ); // true

// сменить прототип на dog
Object.setPrototypeOf( friend2, dog );
console.log( friend2.getGreeting()); // Woof, hi!
console.log( Object.getPrototypeOf( friend2 ) === dog ); // true
Евгений Лукьянов
Евгений Лукьянов
3 819
Лучший ответ
Валера Окунев Спасибо большое!
Они выставляются по умолчанию то что ты их назначил это не значить что их нет JS
очень интеллектуальный язык потому он многое доделывает за вас сам

Валера Окунев Спасибо! Какие параметры в данном случае доделывает?
>> 1) Не вызывается родительский конструктор
Не вызывается? А строки 19 и 10?
́
>>
2) Помимо того, что он не вызывается так еще ему необходимы параметры для работы, в случае если он вызывается пустой.
В строке 19 вызов без аргументов?
Beso Barsegyan
Beso Barsegyan
80 786