subject

Builder-function based object inheritance chain.

subject

Some sweet object definition, inheritance and instantiation in functional syntax.

var subject = require('subject');
 
// define person builder 
var person = subject.define({
 
        // This will be called on instantiation 
        initializefunction (data) {
            this.name = data.name;
        },
 
        // These are simple methods and prototype properties. 
        introduceSelffunction () {
            return 'My name is ' + this.name
        },
 
        walkfunction () {
            //  
        }
    });
 
// instantiate person 
var joe = person({ name: 'Joe Smith' });
 
joe.introduceSelf() // My name is Joe Smith 
 
 
// define musician builder, which should inherit from person 
var musician = person.define({
        // Overwrite initialization 
        initializefunction (data) {
            // call the person's 
            person.base.initialize.apply(this, arguments);
 
            this.instruments = data.instrments;
        },
 
        playfunction (instrument) {
            return _.contains(this.instruments, instrument) ? '♬ ♫ ♪ ♩ ♭ La La La' : 'I can\'t play that!';
        }
    });
 
// instantiate musician 
var bob = musician({ name: 'Bob Dylan', instruments: ['guitar', 'voice', 'harmonica'] });
 
// person methods 
bob.introduceSelf()    // My name is Bob Dylan 
 
// musician methods. 
bob.play('harmonica')  // ♬ ♫ ♪ ♩ ♭ La La La 
bob.play('trumpet')    // I can't play that!