Я новичок в 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");