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!'