Ruby inspired Structs for node and the browser.

Structs for JavaScript inspired by Ruby

Ruby Structs are an awesome way to add several attributes to a class. Inspired by these, Strukt provides a similiar minimalistic API for JavaScript in the browser and in Node.

  • Node: $ npm install strukt

    var Struct = require('strukt');
  • Browser: Grab lib/strukt.js and include it in your HTML document.

    A global Struct function will be added. AMD and CommonJS loaders are also supported.

Simple. Pass the parameters you want to Struct, a new constructor function will be returned.

var Point = new Struct('x', 'y');
var p = new Point(42, 1337);
p.x; // 42 
p.y; // 1337 

Prefer CoffeeScript?

class Point extends new Struct 'x''y'
  # More class logic 
= new Point 421337;
p.# 42 
p.# 1337 

Explicit is better than implicit. The Zen of Python

Explicits structs are pretty much the same thing, but you pass an object to the returned constructor.

var Person = new Struct.Explicit('forename', 'surname');
var john = new Person({
    forename: 'John',
    surname: 'Doe'
john.forename; // 'John' 
john.surname; // 'Doe' 

Maybe you'd like to add a constructor function to your Struct. If the last argument of Struct or Struct.Explicit is a function it'll used as a constructor function.

var Person = new Struct.Explicit('forename', 'surname', function () {
    alert('Welcome ' + this.forename + " " + this.surname);
new Person({
    forename: 'John',
    surname: 'Doe'
}); // Will alert 'Welcome John Doe' 

Struct and Struct.Explicit return functions, so you can just add properties to the prototype as always.

var Point = new Struct("x", "y");
Point.prototype.equals = function (pt) {
    return this.x == pt.x && this.y == pt.y;

Visit spec/index.html in your browser to run the test suite.

Alternatively you can install testacular and enjoy the awesomeness

$ testacular start

It will launch several browsers and run the tests again if a a spec or the library code changes.