node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »


Livescript has a pretty sweet class system. Shame we can't use it in JS-land.



const Base = require('estira');
var Foo = Base.extend({
  initialize: function(bar) { = bar;
  frob: function(baz) {
    return + baz;
var foo = new Foo("hello ");
foo.frob("world"); //⇒ "hello world" 


Base = require('estira')

Base class with the bare minimal needed for inheritance. Extend it, it doesn't do much on its own.

Subclass = Superclass.extend(methods)

Returns a prototypal subclass of Superclass, inheriting Superclass's instance and class properties, extended with the object passed in. If methods contains a method called initialize, it is used as Subclass's constructor. If initialize is omitted, it delegates to the parent class' constructor.


Extends the "metaclass" of Class. Lets you add static methods, which may be inherited.


Refers to the parent class implementation of the function. Lets you call super methods like

var Superclass = Base.extend({
  quux: function() {
    return "hello";
var Subclass = Superclass.extend(
  quux: function quux() {
    return quux.super$() + " world";

Extending third-party classes

If you want to extend a class that doesn't derive from Base (e.g. EventEmitter), you can shoehorn estira onto it using Sub =, methods). Classes created this way can be further extended, and super$ calls still work.


MIT. © 2014 Matt Brennan.