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.
Installation
-
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.
Basic structs
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;
p.y;
Prefer CoffeeScript?
class Point extends new Struct 'x', 'y'
# More class logic
p = new Point 42, 1337;
p.x # 42
p.y # 1337
Explicit structs
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.surname;
Constructor functions
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'
});
Adding properties to the prototype
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;
}
Test suite
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.