title: JavaScript Inheritance
body: <p>I am trying to implement inheritance in javascript. I came up with following minimal code to support it.</p>
  
  <pre><code>function Base(){
      this.call = function(handler, args){
        handler.call(this, args);
      }
  }
  
  Base.extend = function(child, parent){
      parent.apply(child);
      child.base = new parent;
      child.base.child = child;
  }
  </code></pre>
  
  <p>Experts, please let me know if this will be sufficient or any other important issue I may have missed. Based on similar issues faced please suggest other changes.</p>
  
  <p>Here is complete test script:</p>
  
  <pre><code>function Base(){
      this.call = function(handler, args){
        handler.call(this, args);
      }
      this.superalert = function(){
          alert('tst');
      }
  }
  
  Base.extend = function(child, parent){
      parent.apply(child);
      child.base = new parent;
      child.base.child = child;
  }
  
  function Child(){
      Base.extend(this, Base);
      this.width = 20;
      this.height = 15;
      this.a = ['s',''];
      this.alert = function(){
          alert(this.a.length);
          alert(this.height);
      }
  }
  
  function Child1(){
      Base.extend(this, Child);
      this.depth = 'depth';
      this.height = 'h';
      this.alert = function(){
          alert(this.height); // display current object height
          alert(this.a.length); // display parents array length
          this.call(this.base.alert); 
            // explicit call to parent alert with current objects value
          this.call(this.base.superalert); 
            // explicit call to grandparent, parent does not have method 
          this.base.alert(); // call parent without overriding values
      }
  }
  
  var v = new Child1();
  v.alert();
  alert(v.height);
  alert(v.depth);
  </code></pre>