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

Douglas Crockford, кажется, нравится следующий подход наследования:

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

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

13
задан Tower 30 May 2010 в 15:06
поделиться

2 ответа

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

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

var p = new Person(true);

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

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

7
ответ дан 2 December 2019 в 00:45
поделиться

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

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

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

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

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

6
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: