【发布时间】:2016-08-31 23:06:26
【问题描述】:
我最近为自己发现了原型,很乐意在解决这个问题时得到一些帮助:
代码示例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”,我不知道我错在哪里,所以请指望您的帮助,谢谢。
【问题讨论】:
-
Car.makeCar是 function 而不是 Car 对象。 -
instanceof测试对象的原型链是否包含构造函数的原型。bmw的原型链包含Car,而不是Car.makeCar。 -
bmw instanceof Car仍然有效,因为您仍在创建要从Car.prototype继承的实例 -
我对示例 2 的初始测试是 console.log( bmw instanceof Car );但在这种情况下,我有一个错误:“未捕获的 TypeError:'instanceof' 的右侧不可调用”。
-
@Mike:哦,对了,
Car需要一个构造函数才能工作。Car.makeCar不是构造函数,并且在其.prototype属性上没有实例的原型,因此这也不起作用。
标签: javascript prototype instanceof