javascript - 使用 Object.create 进行继承?

标签 javascript inheritance prototype prototypal-inheritance

<分区>

此代码来自 MDN 上关于 Object.create() 的文章:

// 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 问题。 ,他们没有完全解决我的困惑。

最佳答案

  • Object.create(Shape) 返回一个继承自 Shape 的对象。

    如果您想创建 Shape 的子类,您可能不想这样做。

  • Object.create(Shape.prototype) 返回一个继承自 Shape.prototype 的对象。

    因此,这个对象不会有xy自己的属性。

  • new Shape() 这样做:

    1. 创建一个继承自 Shape.prototype 的对象。
    2. 调用 Shape,将前一个对象作为 this 传递。
    3. 返回该对象(假设 Shape 没有返回另一个对象)。

    因此,此对象将具有xy 自己的属性。

关于javascript - 使用 Object.create 进行继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28079471/

相关文章:

c++ - 继承的类数据成员

javascript - 在 JavaScript 中,如何使用 [] 运算符访问从 Array 继承的对象?

javascript - 高分子高分子微致错

javascript - 无法初始化 Leaflet.draw 工具栏

javascript - 如何遍历div并获取每个值

c# - 为什么 IList<T> 不只从 ICollection<T> 继承?

javascript - 如何在 javascript 中指定类型

c# - 需要帮助理解实现接口(interface)的抽象类

JavaScript 面向对象 : method definition with or without "prototype"

javascript - Javascript 函数对象的属性