我正在尝试掌握 Javascript 的某些概念。这是一个小情况
// Shape - superclass
function Shape() {
this.x = 0;
this.y = 0;
}
// superclass method
Shape.prototype.move = function(x, y) {
this.x += x;
this.y += y;
console.info('Shape moved.');
};
// Rectangle - subclass
function Rectangle() {
Shape.call(this); // call super constructor.
}
// subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype)
现在,如果我输入
Rectangle.prototype instanceof Shape
true
现在,这是否意味着返回对象的类型 Object.create
(在我的第一个代码片段的最后一行)是 Shape
?看来是的。虽然我没有在任何地方请求它,但我只是指定了该对象的原型(prototype),它应该与 Shape.prototype
相同。 .
我只是在 Object.create
中找不到此记录文档。有人可以解释一下是否是这种情况以及(也许也)为什么是这样吗?
额外:另外,似乎是通过使用线
Rectangle.prototype = Object.create(Shape.prototype)
我继承的是方法,而不是 Shape
中声明的实例变量构造函数?因为原型(prototype)不知道 Shape
中指定的属性。构造函数?例如x
和y
.
最佳答案
Does it mean the type of the object returned by
Object.create
(in my last line of first code snippet), isShape
?
没有。没有 Shape
类型。 ECMAScript 只有以下类型:Undefined、Null、Boolean、Number、String、Symbol、Object。
Object.create
返回的值属于Object类型。
I just specified the prototype of that object which should be same as
Shape.prototype
.
是的,这正是您所得到的。 Object.create
返回一个新的不可调用的普通对象,其 [[Prototype]] 为参数。
instanceof
运算符默认只检查原型(prototype)链,即属性继承。它不能确保所谓的实例确实是由构造函数构造的。
关于javascript - object.Create 返回的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40349376/