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