Я новичок в JavaScript OOP. Не могли бы вы объяснить разницу между следующими блоками кода. Я тестировал, и оба блока работают. Какая наилучшая практика и почему?
Первый блок:
function Car(name){
    this.Name = name;
}
Car.prototype.Drive = function(){
    document.write("My name is " + this.Name + " and I'm driving. <br />");
}
SuperCar.prototype = new Car();
SuperCar.prototype.constructor = SuperCar;
function SuperCar(name){
    Car.call(this, name);
}
SuperCar.prototype.Fly = function(){
    document.write("My name is " + this.Name + " and I'm flying! <br />");
}
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(){ 
        document.write("My name is " + this.Name + " and I'm driving. <br />");
    }
}
SuperCar.prototype = new Car();
function SuperCar(name){
    Car.call(this, name);
    this.Fly = function(){
        document.write("My name is " + this.Name + " and I'm flying! <br />");
    }
}
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? Является ли свойство конструктора переопределенным при установке prototype? Я прокомментировал эту строку, и ничего не изменилось.
Зачем вызывать Car.call(this, name); в конструкторе SuperCar? Не будут ли свойства и методы Car "унаследованы", когда я сделаю
var myCar = new Car("Car");
