cachaito
12/21/2014 - 1:37 PM

Tworzenie obiektów

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