Когда вы .call
, первый аргумент должен быть this
, на который вы хотите, чтобы вызываемая функция ссылалась. Таким образом,
Vehicle.call(energyType, energy);
приводит к вызову Vehicle
с параметром one , при этом значение this
представляет собой то, что изначально было переменной energyType
(приведено к объекту, поскольку this
должен быть объектом не примитивный). Вы можете увидеть это, если вы console.log
внутри Vehicle
:
function Vehicle(energyType, energy) {
console.log('this', this);
console.log('energyType', energyType);
console.log('energy', energy);
this.energyType = energyType;
this.energy = energy;
}
function Car(energyType, energy) {
Vehicle.call(energyType, energy);
this.doors = 4;
}
Car.prototype = Object.create(Vehicle.prototype);
Vehicle.prototype.run = function() {
console.log(`This vehicle is running on ${this.energyType}.`);
}
const c = new Car('gas', 80);
c.run();
Изменить на:
Vehicle.call(this, energyType, energy);
function Vehicle(energyType, energy) {
this.energyType = energyType;
this.energy = energy;
}
function Car(energyType, energy) {
Vehicle.call(this, energyType, energy);
this.doors = 4;
}
Car.prototype = Object.create(Vehicle.prototype);
Vehicle.prototype.run = function() {
console.log(`This vehicle is running on ${this.energyType}.`);
}
const c = new Car('gas', 80);
c.run();