JavaScript: instanceof 运算符意外结果
JavaScript: instanceof operator unexpected result
我最近为自己发现了原型,很乐意得到一些帮助来解决这个问题:
代码示例 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" 运算符。
在第一个示例中,它将记录 "true",但在第二个示例中,它将记录 "false",我不知道我哪里错了,所以希望得到您的帮助,谢谢。
console.log( bmw instanceof Car.makeCar );
yields false
…因为 Car.makeCar
在其 .prototype
属性 上没有实例的原型。 instanceof
表达式等同于 Car.makeCar.prototype.isPrototypeOf(bmw)
。要使其正常工作,您需要设置
Car.makeCar.prototype = Car.prototype;
但这很奇怪。只需保留标准模式即可。如果您想在结构单元中与构造函数一起声明您的方法,请将所有内容包装在 IEFE 中或仅使用 ES6 class
我最近为自己发现了原型,很乐意得到一些帮助来解决这个问题:
代码示例 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" 运算符。
在第一个示例中,它将记录 "true",但在第二个示例中,它将记录 "false",我不知道我哪里错了,所以希望得到您的帮助,谢谢。
console.log( bmw instanceof Car.makeCar );
yieldsfalse
…因为 Car.makeCar
在其 .prototype
属性 上没有实例的原型。 instanceof
表达式等同于 Car.makeCar.prototype.isPrototypeOf(bmw)
。要使其正常工作,您需要设置
Car.makeCar.prototype = Car.prototype;
但这很奇怪。只需保留标准模式即可。如果您想在结构单元中与构造函数一起声明您的方法,请将所有内容包装在 IEFE