Я изучаю Object.create и наследование в JavaScript из курса Udemy, и у меня возникло недоразумение. И я хочу спросить вас, можете ли вы помочь мне понять, как это работает. Заранее спасибо!
Например, у меня есть эта простая строка кода:
var Person = function(name, yearOfBirth, job) {
this.name = name;
this.yearOfBirth = yearOfBirth;
this.job = job;
};
Person.prototype.calculateAge = function() {
var age = new Date().getFullYear() - this.yearOfBirth;
console.log(age);
};
var Athlete = function(name, yearOfBirth, job, olympicGames, medals) {
Person.call(this, name, yearOfBirth, job);
this.olympicGames = olympicGames;
this.medals = medals;
};
Athlete.prototype = Object.create(Person.prototype);
Athlete.prototype.constructor = Athlete;
var objAthlete = new Athlete('Mark', 1990, 'swimmer', 3, 10);
Я хочу спросить вас, обязательно ли ставить эту строку кода:
Person.call(this, name, yearOfBirth, job);
Могу ли я изменить конструктор Athlete с помощью следующего кода:
var Athlete = function(name, yearOfBirth, job, olympicGames, medals) {
this.name = name;
this.yearOfBirth = yearOfBirth;
this.job = job;
this.olympicGames = olympicGames;
this.medals = medals;
};
Я понимаю, почему мы используем Object.create и почему мы присваиваем правильное значение свойству конструктора прототипа, но я не понимаю, обязательно ли это строка кода.
И еще один вопрос о _ proto _, я знаю о prototype и "dunder" proto, но я не понимаю его в следующей ситуации.
Например, если я напишу console.dir(abjAthlete)
, я получу этот вывод в консоли:
Инструктор говорит, что прототипом является Person, и это означает, что свойство прототипа конструктора функции Athlete совпадает со свойством прототипа Person. Как это возможно, потому что если я пишу Athlete.__proto__ === Person.prototype
, я получаю false . Я очень ценю любые отзывы!