SomeModule = {
methodFromSomeModule: function() {}
};

SomeOtherModule = {
methodFromSomeOtherModule: function() {}
};

Person = Class.create(function() {

// mixin instance methods to prototype
Class.add(this, SomeModule);

// mixin class methods
Class.mixin(this, SomeOtherModule);

// private variables just work
var secret = 'I am a private variable!';

// private methods just work
function secretFunction() {
return secret;
};

// add class methods one at a time
this.anotherClassMethod = function() {
return secretFunction();
};

// add instance methods one at a time
this.prototype.anotherInstanceMethod = function() {
return secretFunction();
}

// methods returned are added to prototype
return {
initialize: function() {},

moreInstanceMethods: function() {
return secretFunction();
}
};
});

Person.anotherClassMethod() //=> 'I am a private variable!'

var joe = new Person();
joe.anotherInstanceMethod() //=> 'I am a private variable!'