“Using JS.Class” or “Sharing a Class Between Node.JS and the Browser Part 2”

Just a quick snippet, but this is a much better way of sharing a class between Node.js and the browser. I also like this psuedo Class implementation much better than the Class.js thing, it always seemed a bit ghetto how you had to say.

The ugly way (i was using this before but it felt wrong)

var ServerGame = require('./ServerGame.js').Class;
 
var myInstance = new ServerGame();

There’s a better way!

/**
 * Animal.js
 * This is an example I created for us JS.Class
 * Mario Gonzalez | http://onedayitwillmake.com
 */
var init = function()
{
	return new JS.Class(
	{
		initialize: function(name) {
			this.name = name;
			console.log( 'Animal::initialize - ', name);
		},
 
		/**
		 * Cause the Animal to tell you what it likes (Testing JavaDoc)
		 * @param things What the animal likes
		 */
		speak: function(things) {
			return 'My name is ' + this.name + ' and I like ' + things;
		}
	});
};
 
// Handle Node.JS and browser
if (typeof window === 'undefined') {
	require('../lib/jsclass/core.js');
	Animal = init();
} else {
	define(['lib/jsclass/core'], init);
}

Ok, but now to use it in another file!

// Testing JS.Class
 
// bring it in
require('../client/js/scratchpad/Animal.js');
 
// use it
var animal = new Animal('Rex');
console.log('Animal', animal.speak("YELLING!!!") ); // Should output: Animal My name is Max and I like BARKING!!!

There you have it – so simple and soooo much cleaner!!