Наследование JavaScript

Дуглас Крокфорд, похоже, выглядит следующим наследованием:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}
newObject = Object.create(oldObject);

Мне все хорошо, но как оно отличается от подхода John Resig простого наследования?

В основном он переходит на

newObject = Object.create(oldObject);

против

newObject = Object.extend();

И меня интересуют теории. Реализация мудрых там, кажется, не имеет большого значения.

Ответы

Ответ 1

Подход совершенно другой, метод Resig создает конструкторские функции, этот подход также известен как классическое наследование i.e.:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  }
});

var p = new Person(true);

Как вы видите, объект Person фактически является конструктором, который используется с оператором new.

С помощью метода Object.create наследование основано на экземплярах, где объекты наследуются от других объектов напрямую, что также известно как прототипное наследование или дифференциальное наследование.

Ответ 2

Они совершенно разные.

Метод Дугласа Крокфорда создает экземпляр, который наследует другой экземпляр.

Подход Джона Реджига создает класс, который наследует другой класс.

При использовании метода Дугласа Крокфорда вы создаете новый экземпляр объекта, который наследует один существующий экземпляр.

При использовании подхода John Resig вы создаете функцию-конструктор, которую затем можете использовать для создания экземпляров унаследованного класса.