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();
И я интересуюсь теориями. Реализация, мудрая там, кажется, не много различия.
Подход совершенно другой, метод Resig создает функции-конструкторы, этот подход также известен как классическое наследование , то есть:
var Person = Class.extend({
init: function(isDancing){
this.dancing = isDancing;
}
});
var p = new Person(true);
Как видите, объект Person
на самом деле является функция-конструктор , которая используется с оператором new
.
При использовании метода Object.create
наследование основано на экземплярах, в которых объекты наследуются напрямую от других объектов, что также известно как Прототипное наследование или Дифференциальное наследование. .
Они совершенно разные.
Метод Дугласа Крокфорда создает экземпляр , который наследует другой экземпляр.
Подход Джона Ресига создает класс , который наследует другой класс.
При использовании метода Дугласа Крокфорда вы создаете новый экземпляр объекта, который наследует единственный существующий экземпляр.
При использовании подхода Джона Ресига вы создаете функцию-конструктор, которую затем можете использовать для создания экземпляров унаследованного класса.