Javascript 对象返回的对象类型。创建

Javascript 对象返回的对象类型。创建,javascript,Javascript,我试图掌握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 - subclas

我试图掌握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
现在,它是否意味着
对象返回的对象类型。create
(在我的第一个代码片段的最后一行)是
Shape
?似乎是的。虽然我没有在任何地方请求它,但我只是指定了该对象的原型,它应该与
Shape.prototype
相同

我只是在
对象中找不到这个文档。创建
文档。有人能解释一下情况是否如此,以及(也许)为什么会这样吗

Extra:另外,似乎是通过使用line

Rectangle.prototype = Object.create(Shape.prototype)
我继承的是方法,而不是
Shape
构造函数中声明的实例变量?因为prototype不知道
Shape
构造函数中指定的属性?e、 g.
x
y

window.addEventListener(“DOMContentLoaded”,function()){
//形状超类
函数形状(){
这个.x=0;
这个。y=0;
}
//超类方法
Shape.prototype.move=函数(x,y){
这个.x+=x;
这个.y+=y;
outputArea.innerHTML+='
形状已移动'; }; //矩形子类 函数矩形(){ Shape.call(this);//调用超级构造函数。 } //子类扩展了超类 Rectangle.prototype=Object.create(Shape.prototype) var outputArea=document.getElementById(“输出”); //形状不从形状继承: outputArea.innerHTML++“
形状的形状实例:”+(形状的形状实例); //Shape是一个构造函数,函数继承自对象: outputArea.innerHTML+=“
对象的形状实例:”+(对象的形状实例); outputArea.innerHTML+=“
Shape.prototype为:”+typeof Shape.prototype; //矩形不是实例-它是一个构造函数: outputArea.innerHTML++“
形状的矩形实例:”+(形状的矩形实例); //但是,矩形的原型是形状的实际实例: outputArea.innerHTML+=“
Rectangle.prototype形状实例:”+(Rectangle.prototype形状实例); //但是,如果我们做一个矩形的例子。。。 var r=新矩形(); //Shape的构造函数将被调用(执行),新的矩形对象实例将作为“this”对象。 //r是矩形的实例,矩形是形状的实例: outputArea.innerHTML+=“
r形状实例:”+(r形状实例); //使用使用实例字段的继承方法: r、 移动(10,20); outputArea.innerHTML+=”
r.x=“+r.x; outputArea.innerHTML+=”
r.y=“+r.y; });
window.addEventListener(“DOMContentLoaded”,function()){
//形状超类
函数形状(){
这个.x=0;
这个。y=0;
}
//超类方法
Shape.prototype.move=函数(x,y){
这个.x+=x;
这个.y+=y;
outputArea.innerHTML+='
形状已移动'; }; //矩形子类 函数矩形(){ Shape.call(this);//调用超级构造函数。 } //子类扩展了超类 Rectangle.prototype=Object.create(Shape.prototype) var outputArea=document.getElementById(“输出”); //形状不从形状继承: outputArea.innerHTML++“
形状的形状实例:”+(形状的形状实例); //Shape是一个构造函数,函数继承自对象: outputArea.innerHTML+=“
对象的形状实例:”+(对象的形状实例); outputArea.innerHTML+=“
Shape.prototype为:”+typeof Shape.prototype; //矩形不是实例-它是一个构造函数: outputArea.innerHTML++“
形状的矩形实例:”+(形状的矩形实例); //但是,矩形的原型是形状的实际实例: outputArea.innerHTML+=“
Rectangle.prototype形状实例:”+(Rectangle.prototype形状实例); //但是,如果我们做一个矩形的例子。。。 var r=新矩形(); //Shape的构造函数将被调用(执行),新的矩形对象实例将作为“this”对象。 //r是矩形的实例,矩形是形状的实例: outputArea.innerHTML+=“
r形状实例:”+(r形状实例); //使用使用实例字段的继承方法: r、 移动(10,20); outputArea.innerHTML+=”
r.x=“+r.x; outputArea.innerHTML+=”
r.y=“+r.y; });
这是否意味着
object.create
(在我的第一个代码片段的最后一行)返回的对象类型是
Shape

没有。没有
形状
类型。ECMAScript只有以下类型:未定义、空、布尔、数字、字符串、符号、对象

Object.create返回的值属于对象类型

我刚刚指定了该对象的原型,它应该与
Shape.prototype
相同

是的,那正是你得到的
Object.create
返回一个新的不可调用的普通对象,其[[Prototype]]是参数

默认情况下,
instanceof
操作符只检查原型链,即属性继承。它不能确保假定的实例确实是由构造函数构造的

这是否意味着
object.create
(在我的第一个代码片段的最后一行)返回的对象类型是
Shape

没有。没有
形状
类型。ECMAScript只有以下类型:未定义、空、布尔、数字、字符串、符号、对象

Object.create返回的值属于对象类型

我刚刚指定了该对象的原型,它应该与
Shape.prototype
相同

是的,那正是你得到的<代码>对象。创建
r