Douglas Crockford seems to like the following inheritance approach:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);
It looks OK to me, but how does it differ from John Resig’s simple inheritance approach?
Basically it goes down to
newObject = Object.create(oldObject);
versus
newObject = Object.extend();
And I am interested in theories. Implementation wise there does not seem to be much difference.
The approach is completely different, the Resig technique creates constructor functions, this approach is also known as classical inheritance i.e.:
As you see, the
Personobject is actually a constructor function, which is used with thenewoperator.With the
Object.createtechnique, the inheritance is based on instances, where objects inherit from other objects directly, which is also known as Prototypal Inheritance or Differential Inheritance.