Подтвердить что ты не робот

Зачем устанавливать конструктор прототипа в его конструкторскую функцию?

Относительно строки этого script:

function Vehicle(hasEngine, hasWheels) {
    this.hasEngine = hasEngine || false;
    this.hasWheels = hasWheels || false;
}

function Car (make, model, hp) {
    this.hp = hp;
    this.make = make;
    this.model = model;
}

Car.prototype = new Vehicle(true, true);
Car.prototype.constructor = Car; 
Car.prototype.displaySpecs = function () {
    console.log(this.make + ", " + this.model + ", " + this.hp + ", " + this.hasEngine + ", " + this.hasWheels);
}

var myAudi = new Car ("Audi", "A4", 150);
myAudi.displaySpecs(); // logs: Audi, A4, 150, true, true

Мой вопрос: что делает

Car.prototype.constructor = Car;  

делать? Что еще более важно, каковы последствия этого не делать, и в каких обстоятельствах это БОЛЬШЕ полезно?

4b9b3361

Ответ 1

Он восстанавливает свойство .constructor, которое было на исходном объекте прототипа, который вы перезаписывали. Люди восстанавливают его, потому что он должен быть там.

Некоторые люди любят делать...

if (my_obj.constructor === Car) { ... }

Это не требуется, так как instanceof является лучшим тестовым IMO.

if (my_obj instanceof Car) { ... }

if (my_obj instanceof Vehicle) { ... }