Понимание наследования прототипов в JavaScript

Я новичок в ООП JavaScript. Можете ли вы объяснить разницу между следующими блоками кода? Я проверил и оба блока работают. Какая лучшая практика и почему?

Первый блок:

function Car(name){
    this.Name = name;
}

Car.prototype.Drive = function(){
    console.log("My name is " + this.Name + " and I'm driving.");
}

SuperCar.prototype = new Car();
SuperCar.prototype.constructor = SuperCar;

function SuperCar(name){
    Car.call(this, name);
}

SuperCar.prototype.Fly = function(){
    console.log("My name is " + this.Name + " and I'm flying!");
}

var myCar = new Car("Car");
myCar.Drive();

var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();

Второй блок:

function Car(name){
    this.Name = name;
    this.Drive = function(){ 
        console.log("My name is " + this.Name + " and I'm driving.");
    }
}

SuperCar.prototype = new Car();

function SuperCar(name){
    Car.call(this, name);
    this.Fly = function(){
        console.log("My name is " + this.Name + " and I'm flying!");
    }
}

var myCar = new Car("Car");
myCar.Drive();

var mySuperCar = new SuperCar("SuperCar");
mySuperCar.Drive();
mySuperCar.Fly();

Почему автор добавилDrive а такжеFly методы с использованиемprototypeи не объявлял ихthis.Drive метод внутриCar класс и какthis.Fly вSuperCar класс?

ПочемуSuperCar.prototype.constructor должны быть установлены обратноSuperCar? Этоconstructor свойство переопределено, когдаprototype установлен? Я закомментировал эту строку, и ничего не изменилось.

Зачем звонитьCar.call(this, name); вSuperCar конструктор? Не будет свойств и методовCar быть "унаследованным", когда я делаю

var myCar = new Car("Car");

Ответы на вопрос(6)

Ваш ответ на вопрос