• Blogs (9)
    • 📱 236 - 992 - 3846

      đź“§ jxjwilliam@gmail.com

    • Version: ‍🚀 1.1.0
  • JavaScript inherit examples

    Blogs20132013-09-18


    JavaScript Inheritance

    Here I list some basic JavaScript inheritance examples for quick retrieving. Original reference from Stoyan Stefanov. JavaScript inheritance are *NOT* as easy as PHP. I am afraid this will prevent Node.js from getting further in the server-side.

    //1.Very Basicly ineritance - Copy:
    function inheritCopy(C, P) {
      C.prototype = new P();
    }
    // function Parent(){}; function Child(){};
    // inheritCopy(Child, Parent);
    //Child's prototype is an instance invocation of Parent.

    The Select2.js using this to do extension.

    // select2.js, using jQuery.extend(), multi-inheritance:
    function clazz(Parent, methods) {
        var F = function () {};
        F.prototype = new Parent;
        F.prototype.constructor = F;
        F.prototype.parent = Parent.prototype;
        F.prototype = $.extend(F.prototype, methods);
        return F;
    }
    // var AbstractSelect2 = clazz(Object, {...});
    // var SingleSelect2 = clazz(AbstractSelect2, {...});
    // var MultiSelect2 = clazz(AbstractSelect2, {...});

    If not want to get copy from Parent(), just want prototype inheritance, then:

    function Parent() {};
    function Child(){};
    Child.prototype = Parent.prototype; //reference
    var c = new Child(); //get all constructors' prototype.

    An advanced version which:

    1. not including Parent attrs;
    2. inerit Parent.prototype;
    3. change Child.prototype not effect Parent
    // sub-constructor inherit
    function extend(Child, Parent) {
      var F = function() {};
      F.prototype = Parent.prototype;
      Child.prototype = new F();
      Child.prototype.constructor = Child;
      Child.uber = Parent.prototype;
    }
    // function Shape() {}; function TwoDShape() {};
    // extend(TwoDShape, Shape);

    The following inherit from an object, not from constructor function, and extends its attrs to combine in the second paramter’s hash object.

    function objectMixAttrs(o, attrs) {
      var n = null;
      function F() {};
      F.prototype = o;
      n = new F();
      n.uber = o;
    
      for(var i in attrs) {
        n[i] = attrs[i];
      }
      return n;
    }
    // var fastFood = objectMixAttrs(food, { fast_hash });

    A Recursive and deepCopy example:

    function deepCopy(p, c) {
      var c = c || {};
      for (var i in p) {
        if(typeof p[i] === 'object') { // Array or Hash?
          c[i] = (p[i].constructor === Array) ? [] : {};
          deepCopy(p[i], c[i]);
        }
        else {
          c[i] = p[i];
        }
      }
      return c;
    }
    // var parent={...}; var deep = deepCopy(p);