Каковы различия между Rectangle.prototype = Object.create (Shape.prototype) и Rectangle.prototype = Shape.prototype?

Я читал следующие коды и начинаю задумываться, в чем разница между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);
 Jai26 июл. 2016 г., 06:49
Оба схожи: первый - стандарт ES5, второй - раньше стандартов ES5.

Ответы на вопрос(1)

Rectangle.prototype = Shape.prototype; указывает прототип Rectangle на тот же объект, что и прототип Shape, то есть оба прототипа теперь являются одним и тем же объектом. Так что если вы редактируетеRectangle.prototype.method это также появится вShape.prototype.method.

Rectangle.prototype = Object.create(Shape.prototype); создаетновый объект которая наследует прототип Shape и присваивается Rectangle, то есть если вы редактируете прототип Rectangle с этой точки, это не повлияет на Shape. Но если вы отредактируете прототип Shape, вы получите те же свойства в Rectangle по наследству.

Поиграть -https://jsfiddle.net/j8o10zfn/

 Duly Kinsky26 июл. 2016 г., 08:17
Спасибо, я посмотрел еще немного, и вы правы, поэтому я удалил ответ, так как он плохой. Еще раз спасибо Майкл Гири
 Blake26 июл. 2016 г., 09:24
послеRectangle.prototype = Object.create(Shape.prototype)  называется, почему редактирование прототипа Shape повлияет на Rectangle ??
 Hugo Silva26 июл. 2016 г., 22:59
@Blake - из-за прототипной модели наследования. Эта строка означает, что прототип Rectangle - это объект, который наследует свои свойства от прототипа Shape. Посмотрите на эту статью -developer.mozilla.org/en/docs/Web/JavaScript/...

Ваш ответ на вопрос