Note that there are some explanatory texts on larger screens.

plurals
  1. POSetting prototype on object created through Object.create
    text
    copied!<p>I'm having some trouble figuring out how the prototype chain is set up given the following code. </p> <pre><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' </code></pre> <p>Specifically this line confuses me in the create method:</p> <pre><code>object.prototype = object.fn = Object.create(this.prototype); </code></pre> <p>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.</p> <p>can someone shed some light on what is actually happening?</p> <p><strong>Edit</strong> - I should point out this code comes from <em>Javascript Web Applications</em> by O'reilly</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload