Javascript 使用Object.create进行继承?
这段代码来自Javascript 使用Object.create进行继承?,javascript,inheritance,prototype,prototypal-inheritance,Javascript,Inheritance,Prototype,Prototypal Inheritance,这段代码来自Object.create()上的MDN文章: 第三行到最后一行是我感到困惑的一行 以下两者之间的区别是什么: A.现在怎么样。 B.Rectangle.prototype=Object.create(Shape) C.Rectangle.prototype=新形状() 这三种方法最终会产生相同的结果吗?在rect上定义的相同属性以及定义它们时使用的相同内存 是,我已经阅读了其他有关Object.create()的StackOverflow问题不,他们没有完全解决我的困惑。 Obje
Object.create()
上的MDN文章:
第三行到最后一行是我感到困惑的一行
以下两者之间的区别是什么:
A.现在怎么样。B.
Rectangle.prototype=Object.create(Shape)代码>
C.Rectangle.prototype=新形状()代码>
这三种方法最终会产生相同的结果吗?在rect
上定义的相同属性以及定义它们时使用的相同内存
是,我已经阅读了其他有关Object.create()
的StackOverflow问题不,他们没有完全解决我的困惑。
Object.create(Shape)
返回从Shape
继承的对象
如果您想创建Shape
的子类,您可能不想这样做
Object.create(Shape.prototype)
返回从Shape.prototype
继承的对象
因此,此对象将不具有x
和y
自己的属性
newshape()
执行以下操作:
- 创建从
Shape.prototype
继承的对象
- 调用
Shape
,将上一个对象作为this
传递
- 返回该对象(假设
Shape
未返回其他对象)
因此,此对象将具有
x
和y
自己的属性
您可能应该提到,您不希望原型对象拥有自己的x
和y
属性……我只是不明白调用对象时会发生什么。创建(形状)
。我知道它不起作用,但我不知道为什么。如果您取出行Shape.call(this)
并使用Object.create(Shape)
而不是Object.create(Shape.prototype)
,然后实例化一个矩形
,则生成的对象既没有x
也没有y
也没有move
。发生了什么事?什么被设置为什么?@Aerovistae问题是,由于Shape
是一个函数,Object.create(Shape)
继承自Shape
(它没有自己的属性)、function.prototype
和Object.prototype
。但是,您正在尝试子类化Shape
。这意味着您要从Shape.prototype
(具有move
方法)和Object.prototype
继承。
// 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();