Недавно я обнаружил прототипы для себя, и был бы рад получить некоторую помощь с выяснить, в чем дело:JavaScript: InstanceOf оператора неожиданный результат
Пример кода 1:
"use strict";
var Car = function(loc) {
var obj = Object.create(Car.prototype);
obj.loc = loc;
return obj;
};
Car.prototype.move = function() {
this.loc++;
return this.loc;
};
var bmw = Car(6);
console.log(bmw instanceof Car);
пример кода 2 :
"use strict";
var Car = {
"makeCar": function(loc) {
var obj = Object.create(Car.prototype);
obj.loc = loc;
return obj;
},
"prototype": {
"move": function() {
this.loc++;
return this.loc;
}
}
};
var bmw = Car.makeCar(6);
console.log(bmw instanceof Car.makeCar);
Я написал пример 2, потому что я хочу сохранить методы для объекта Car внутри самого объекта. Я не уверен, что это можно сделать, но он работает до сих пор, кроме оператора «instanceof».
В первом примере он будет записывать «истина», но во втором он будет записывать «ложь», и я не знаю, где я ошибаюсь, поэтому, рассчитывая на вашу помощь, спасибо.
'Car.makeCar' - объект _function_, а не _Car_. – vlaz
'instanceof' проверяет, содержит ли цепочка прототипов объекта прототип конструктора. Цепочка прототипа bmw' содержит 'Car', а не' Car.makeCar'. – Barmar
'bmw instanceof Car' все еще работает, потому что вы все еще создаете экземпляр для наследования из' Car.prototype' – Bergi