Javascript Rectangle.prototype=Object.create(Shape.prototype)和Rectangle.prototype=Shape.prototype之间有什么区别?
我正在阅读以下代码,开始想知道Javascript Rectangle.prototype=Object.create(Shape.prototype)和Rectangle.prototype=Shape.prototype之间有什么区别?,javascript,Javascript,我正在阅读以下代码,开始想知道Rectangle.prototype=Object.create(Shape.prototype)和Rectangle.prototype=Shape.prototype之间有什么区别?因为Object.create(Shape.prototype)和Shape.prototype都返回一个对象 //Shape - superclass function Shape() { this.x = 0; this.y = 0; } Shape.prototyp
Rectangle.prototype=Object.create(Shape.prototype)
和Rectangle.prototype=Shape.prototype
之间有什么区别?因为Object.create(Shape.prototype)和Shape.prototype都返回一个对象
//Shape - superclass
function Shape() {
this.x = 0;
this.y = 0;
}
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.
}
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype=Shape.prototype代码>将矩形的原型指向与形状原型相同的对象,这意味着两个原型现在是同一个对象。因此,如果编辑Rectangle.prototype.method
,它也会出现在Shape.prototype.method
中
Rectangle.prototype=Object.create(Shape.prototype)代码>正在创建一个继承形状原型的新对象,并将其指定给矩形,这意味着如果您从此点编辑矩形的原型,它将不会影响形状的原型。但如果您编辑形状的原型,您将通过继承在矩形中获得相同的属性
玩一玩-两者都很相似,第一个是ES5标准,第二个是在ES5标准之前。谢谢,我进一步研究了它,你是对的,所以我删除了答案,因为它不好。再次感谢Michael Gearya调用Rectangle.prototype=Object.create(Shape.prototype)
后,为什么编辑形状的原型会影响矩形???@Blake-因为原型继承模型。这条线意味着矩形的原型是一个从形状的原型继承属性的对象。看看这篇文章-