DoneJS StealJS jQuery++ FuncUnit DocumentJS
6.0.1
5.33.2 4.3.0 3.14.1 2.3.35
  • About
  • Guides
  • API Docs
  • Community
  • Contributing
  • Bitovi
    • Bitovi.com
    • Blog
    • Design
    • Development
    • Training
    • Open Source
    • About
    • Contact Us
  • About
  • Guides
  • API Docs
    • Observables
      • can-bind
      • can-compute
      • can-debug
      • can-deep-observable
      • can-define
      • can-define/list/list
      • can-define/map/map
      • can-define-backup
      • can-define-stream
      • can-define-stream-kefir
      • can-event-queue
      • can-kefir
      • can-list
      • can-map
      • can-map-compat
      • can-map-define
      • can-observable-array
      • can-observable-object
      • can-observation
      • can-observation-recorder
      • can-observe
      • can-simple-map
      • can-simple-observable
      • can-stream
      • can-stream-kefir
      • can-value
    • Views
      • can-attribute-observable
      • can-component
      • can-observable-bindings
      • can-stache
      • can-stache-bindings
      • can-stache-converters
      • can-stache-element
      • can-stache-route-helpers
      • can-view-autorender
      • can-view-callbacks
      • can-view-import
      • can-view-model
      • can-view-parser
      • can-view-scope
      • can-view-target
      • steal-stache
    • Data Modeling
      • can-connect
      • can-connect-feathers
      • can-connect-ndjson
      • can-connect-tag
      • can-define-realtime-rest-model
      • can-define-rest-model
      • can-fixture
      • can-fixture-socket
      • can-local-store
      • can-memory-store
      • can-ndjson-stream
      • can-query-logic
      • can-realtime-rest-model
      • can-rest-model
      • can-set-legacy
      • can-super-model
    • Routing
      • can-deparam
      • can-param
      • can-route
      • can-route-hash
      • can-route-mock
      • can-route-pushstate
    • JS Utilities
      • can-assign
      • can-define-lazy-value
      • can-diff
      • can-globals
      • can-join-uris
      • can-key
      • can-key-tree
      • can-make-map
      • can-parse-uri
      • can-queues
      • can-string
      • can-string-to-any
      • can-zone-storage
    • DOM Utilities
      • can-ajax
      • can-attribute-encoder
      • can-child-nodes
      • can-control
      • can-dom-data
      • can-dom-events
      • can-dom-mutate
      • can-event-dom-enter
      • can-event-dom-radiochange
      • can-fragment
    • Data Validation
      • can-define-validate-validatejs
      • can-type
      • can-validate
      • can-validate-interface
      • can-validate-legacy
      • can-validate-validatejs
    • Typed Data
      • can-cid
      • can-construct
      • can-construct-super
      • can-data-types
      • can-namespace
      • can-reflect
      • can-reflect-dependencies
      • can-reflect-promise
      • can-types
    • Polyfills
      • can-symbol
      • can-vdom
    • Core
    • Infrastructure
      • can-global
      • can-test-helpers
    • Ecosystem
    • Legacy
  • Community
  • Contributing
  • GitHub
  • Twitter
  • Chat
  • Forum
  • News
Bitovi

can-construct-super

  • npm package badge
  • Star
  • Edit on GitHub

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

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 6.0.1.

On this page

Get help

  • Chat with us
  • File an issue
  • Ask questions
  • Read latest news