Setting prototype on object created through Object.create
===

I'm having some trouble figuring out how the prototype chain is set up given the following code. 

    var Model = {
        prototype: {
            init: function(){},
            log: function(){ console.log('instance method log was called') }
        },
        log: function(){ console.log('class method log was called') },
        create: function() {
            var object = Object.create(this);
            object.parent = this;
            object.prototype = object.fn = Object.create(this.prototype);
            return object;
        },
        init: function() {
            var instance = Object.create(this.prototype);
            instance.parent = this;
            instance.init.apply(instance, arguments);
            return instance;
        }
    }

    var User = Model.create();
    User.log(); // 'class method log was called'

    // create a new method after creation
    Model.warn = function() { console.warn('warn was called') }

    User.warn() // 'warn was called'
    
    var user = User.init();
    user.log(); // 'instance method log was called'
    
Specifically this line confuses me in the create method:

    object.prototype = object.fn = Object.create(this.prototype);

I understand how the create method is creating a new object who's prototype points back to Model, but the penultimate line seems to overwrite that prototype with a new object (Model.prototype). However, it seems the original prototype is still intact, as I can add methods to Model even after creating a new object, and the new object can still access it.

can someone shed some light on what is actually happening?


