Чтобы получить Car()
для наследования методов, определенных в прототипе Vehicle()
, вы можете просто использовать:
Car.prototype = Object.create(Vehicle.prototype);
Здесь Object.create()
метод используется для создания новый объект и установите для него значение Car.prototype
. Новый объект имеет Vehicle.prototype
в качестве прототипа и поэтому наследует все методы, доступные в Vehicle.prototype
. Таким образом, нет необходимости использовать приведенные ниже логи c:
// assigning the constructor
Car.prototype.constructor=Object.create(Vehicle.constructor)
DEMO:
// declared class vehicle
function Vehicle(make, model, year) {
this.make = make
this.model = model
this.year = year
}
// 2 - Add a function to the Vehicle prototype called start which returns the string //"VROOM!"
Vehicle.prototype.start = function() {
return "VROOM!"
}
// declared child class car
function Car(make, model, year) {
Vehicle.apply(this, arguments)
this.numWheels = 4
}
Car.prototype = Object.create(Vehicle.prototype);
Car.prototype.constructor = Car;
var sedan = new Car("Tractor", "John Deere", 1999)
console.log(sedan.start())
Лучший подход с использованием Classes
:
ECMAScript 2015 вводит синтаксис класса для JavaScript как способ написания повторно используемых классов с использованием более простого и понятного синтаксиса, который больше похож на классы в C ++ или Java. Здесь мы преобразуем пример Vehicle и Car из наследования прототипа в классы, чтобы показать вам, как это делается.
DEMO:
class Vehicle {
constructor(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
start() {
return "VROOM!"
};
}
class Car extends Vehicle {
constructor(make, model, year) {
super(); // Now 'this' is initialized by calling the parent constructor.
}
bonet() {
return "VROOM2!"
};
}
var sedan = new Car("Tractor", "John Deere", 1999)
console.log(sedan.start())
console.log(sedan.bonet())