此代码来自Object.create()
上的MDN文章:
// 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.constructor = Rectangle;
var rect = new Rectangle();
第三行到最后一行是我感到困惑的行。
之间有什么区别:
一个。现在怎么样。
B. Rectangle.prototype = Object.create(Shape);
C. Rectangle.prototype = new Shape();
不是所有3个最终都会产生相同的结果吗?在rect
上定义了相同的属性,并使用相同的内存来定义它们?
是,我已阅读其他有关Object.create()
的StackOverflow问题。 没有,他们没有完全解决我的困惑。
答案 0 :(得分:3)
Object.create(Shape)
返回一个继承自Shape
。
如果你想创建Shape
的子类,你可能不想这样做。
Object.create(Shape.prototype)
返回一个继承自Shape.prototype
。
因此,此对象不具有x
和y
自己的属性。
new Shape()
执行此操作:
Shape.prototype
。Shape
,将上一个对象传递为this
。Shape
未返回另一个对象)。因此,此对象将拥有x
和y
自己的属性。