Vererbung der prototypischen Vererbung in JavaScript

Ich bin neu in JavaScript-OOP. Können Sie bitte erklären Sie den Unterschied zwischen folgenden code-Blöcke. Ich habe getestet und beide Blöcke arbeiten. Was ist die best practice und warum?

Ersten block:

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();

Zweiten block:

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();

Warum hat der Autor hinzufügen Drive und Fly Methoden mit prototypeaber nicht erklären, wie this.Drive Methode innerhalb Car Klasse und this.Fly im SuperCar Klasse?

Warum SuperCar.prototype.constructor eingestellt werden müssen, um wieder zu SuperCar? Ist die constructor-Eigenschaft überschrieben, wenn prototype eingestellt ist? Kommentierte ich aus dieser Zeile, und nichts hat sich geändert.

Warum nennen Car.call(this, name); im SuperCar Konstruktor? Nicht Eigenschaften und Methoden von Car werden 'vererbt', wenn ich

var myCar = new Car("Car");

InformationsquelleAutor der Frage Dasha Salo | 2009-05-21

Schreibe einen Kommentar