DoneJS StealJS jQuery ++ FuncUnit DocumentJS
3.0.0
2.3.27

 

  • Github
  • Twitter
  • Chat
  • Forum
  • Guides
  • Core
  • Ecosystem
    • can-construct-super
    • can-define-stream
    • can-fixture
    • can-fixture-socket
    • can-jquery
    • can-stache-converters
    • can-stream
    • can-vdom
    • can-view-import
    • can-zone
    • steal-stache
  • Infrastructure
  • Legacy
  • Bitovi
    • Bitovi.com
    • Blog
    • Consulting
    • Training
    • Open Source
  • Chat
  • Forum
  • Star
  • Follow @canjs
  • CanJS
  • /
  • Ecosystem
  • /
  • can-construct-super
  • / On this page
    • can-construct-super

      module

      can.Construct.super is a plugin that makes it easier to call base functions from inside inheriting functions.

      • npm package badge
      • Star
      • source

      construct._super([...args])

      Calls the base constructor function's method.

      Parameters

      1. args {Any}:

        parameters to pass to the base function

      With this plugin, functions that are inheriting from base functions are provided with a specialized this._super reference to the base function from which they inherit.

      This is especially useful for calling base classes' init and setup, but it can be used in any inheriting function.

      The Person and Programmer examples from init demonstrate _super's use. Here's how those classes look without can.Construct.super:

      var Person = Construct.extend({
          init: function(first, last) {
              this.first = first;
              this.last  = last;
          }
      });
      
      var Programmer = Person.extend({
          init: function(first, last, language) {
              // call base's init
              Person.prototype.init.apply(this, arguments);
      
              // other initialization code
              this.language = language;
          },
          bio: function() {
              return "Hi! I'm " + this.first + " " + this.last +
                  " and I write " + this.language + ".";
          }
      });
      

      And here's how Programmer works using _super:

      var Programmer = Person.extend({
          init: function(first, last, language) {
              // call base's init
              this._super(first, last);
      
              // other initialization code
              this.language = language;
          },
          bio: function() {
              return "Hi! I'm " + this.first + " " + this.last +
                  " and I write " + this.language + ".";
          }
      });
      

      If you want to pass an array of arguments (or an arguments object) to _super, use apply:

      var Programmer = Person.extend({
          init: function(first, last, language) {
              // call base's init
              this._super.apply(this, arguments);
      
              // other initialization code
              this.language = language;
          },
          bio: function() {
              return "Hi! I'm " + this.first + " " + this.last +
                  " and I write " + this.language + ".";
          }
      });
      

      _super on constructors

      can.Construct.super also adds super to the constructor, so you can use it in static functions.

      Here is a base class that has a method that squares numbers and an inherited class that has a method that cubes numbers:

      var Squarer = can.Construct.extend({
          raise: function(n) {
              return n*n;
          }
      }, {});
      
      var Cuber = Squarer.extend({
          raise: function(n) {
              return n * this._super(n);
          }
      }, {});
      

      CanJS is part of DoneJS. Created and maintained by the core DoneJS team and Bitovi. Currently 3.0.0.