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();