Понимание наследования прототипов в 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");