Ciekawy artykuł: http://designpepper.com/blog/drips/basic-inheritance-with-object-create.html Polyfill Object.create pochodzi ze strony: http://javascript.crockford.com/prototypal.html
//dziedziczenie prototypowe przy użyciu Object.create
var obj1 = {
name: "Rudolf"
};
var obj2 = Object.create(obj1);
obj2.hasOwnProperty('name'); //false
obj2.name; //Rudolf
obj1.name = "Santa"; //Santa
//teraz robi się ciekawie
delete obj2.name; //Rudolf
obj2 = {name: 'Claus'}; //Claus
delete obj2.name; //undefined - nadpisując nowy obiektem obj2 tracimy połączenie protoypowe z obj1!
//dzidziczenie klasyczne (objektowe) przy użyciu Object.create - patrz basic inheritance.js
var Person = {
greeting: function() {
return 'Hello I\'m a ' + this.name;
}
};
var santa = Object.create(Person);
santa.name = 'Santa Claus';
santa.greeting();
//Object.create() może przyjmować drugi argument.
//Bardziej zaawansowany przykład - patrz: Object.defineProperty().js
var obj3 = Object.create(obj2, {surname: {value: "Claus"}});
//Korzystając z Object.create operator instanceof staje się bezużyteczny. Zamiast niego trzeba używać metody .isPrototypeOf()
obj2.isPrototypeOf(obj3); //true
obj3 istanceof obj2 //Uncaught TypeError: Expecting a function in instanceof check, but got #<Object>
//Object.create() polyfill by Douglas Crockford
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);