An OOP framework for Node.js and the browser
PseudoClass provides construct(), destruct(), _super(), and an init() method that runs after construction is complete.
PseudoClass uses JavaScript constructors and prototypal inheritance under the hood. Monkey-patching, instanceof, and instance.constructor all work as expected.
Mixins can be added when a class is declared using the mixins option or after instantiation with the instance.mixin() method.
Stay classy and boilerplate-free with string-based toString declarations and automatic chaining of construct() and destruct().
Make instance properties non-writable, non-enumerable, or employ setters & getters with the properties option, then inherit and override individually.
PseudoClass is completely standalone. All you need to stay classy is Class.js.
As PseudoClass makes use of ECMAScript 5 features, it is only compatible with modern browsers.
- IE 9+
- Firefox 4+
- Chrome 6+
- Safari 5+
- Opera 12+
- Node 0.8+
PseudoClass can be used in a Node, AMD, or browser environment out of the box.
PseudoClass empowers you without getting in your way. See the examples below to see how PseudoClass makes prototypal inheritance painless.
var Parent = Class({
toString: 'Parent',
properties: {
visible: {
value: true,
enumerable: true
}
},
construct: function() {
console.log('Parent: Constructing');
},
destruct: function() {
console.log('Parent: Destructing');
},
doStuff: function() {
console.log('Parent: Doing stuff');
}
});A mixin is a set methods you can plug into any class. Mixins can use _super, just like normal methods.
var stuffDoer = {
doStuff: function() {
this._super();
console.log('Mixin: Doing stuff');
}
};Mixins added at declaration time become part of the prototype.
var Child = Parent.extend({
toString: 'Child',
mixins: [stuffDoer],
properties: {
visible: {
value: false // Only override the value
}
},
construct: function() {
console.log(this+': Constructing');
},
destruct: function() {
console.log(this+': Destructing');
},
doStuff: function() {
this._super();
console.log(this+': Doing stuff');
}
});var child = new Child();
/* Output:
Parent: Constructing
Child: Constructing
*/
child.doStuff();
/* Output:
Parent: Doing stuff
Child: Doing stuff
Mixin: Doing stuff
*/Mixins added after instantiation become part of the instance.
child.mixin({
doMoreStuff: function() {
console.log(this+': Doing more stuff')
}
});
child.doMoreStuff();
/* Output:
Child: Doing more stuff
*/console.log(child.instanceOf(Child)); // true
console.log(child.instanceOf(Parent)); // true
console.log(child.constructor === Child) // true
console.log(child+''); // 'Child'child.destruct();
/* Output:
Child: Destructing
Parent: Destructing
*/PseudoClass is licensed under the permissive BSD license.