node package manager


Expose Livescript's class system to JavaScript

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 class with the bare minimal needed for inheritance. Extend it, it doesn't do much on its own.

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";

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.