Наследование JavaScript - PullRequest
       4

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

13 голосов
/ 30 мая 2010

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

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

Мне кажется, что все в порядке, но чем он отличается от подхода простого наследования Джона Ресига?

В основном это снижается до

newObject = Object.create(oldObject);

против

newObject = Object.extend();

И меня интересуют теории. Мудрое внедрение, похоже, не имеет большого значения.

Ответы [ 2 ]

7 голосов
/ 30 мая 2010

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

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

var p = new Person(true);

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

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

6 голосов
/ 30 мая 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...