UNPKG

js-oop

Version:

jsOOP aids in object oriented programming in JS.

145 lines (115 loc) 3.89 kB
jsOOP ===== This library is a way to "sugar" some object oriented functionality in Javascript. It's syntactically based on MooTools Class. Consuming jsOOP --------------- jsOOP builds are made using [Browserify](http://browserify.org/) using Standalone builds. This means you can use the files contained in the ```dist``` folder either by using script tags in HTML, using RequireJS and AMD Modules, or in NodeJS using CommonJS. Creating a Class ---------------- So to define a class with a function called foo you'd do the following: ```javascript var NewClass = new Class({ foo: function() { } }); ``` Reserved Keywords ----------------- There are a few reserved keywords in this library which are: * initialize * Extends * parent initialize ---------- Initialize is used to define a constructor within a function like so: ```javascript var NewClass = new Class({ initialize: function() { console.log( 'I AM CONSTRUCTOR ** said with transformer voice **' ); }, foo: function() { } }); ``` Extends ------- Extends is used to define inheritance of objects. Let's continue with our example and create a new class that will inherit from ```NewClass``` and will be called ```NewNewClass```. ```javascript var NewClass = new Class({ initialize: function() { console.log( 'I AM CONSTRUCTOR ** said with transformer voice **' ); }, foo: function() { console.log( 'I am foo of base class' ); } }); var NewNewClass = new Class({ initialize: function() { console.log( 'I AM CONSTRUCTOR NEW NEW' ); }, Extends: NewClass, foo: function() { console.log( 'I am foo of sub class' ); } }); ``` As a note Extends is spelt with a capital "E" since in Javascript ```extends``` is a reserved keyword for future purposes. Extends will also work with other non jsOOP functions/classes. For instance you could even extend jQuery. parent ------ ```parent``` is actually a funtion which will be added to each and every ```Class```. It is used to call super class functions. To note if you're extending another class and ```parent``` is already defined this function will not be added but you can still have the same functionality via a utility function on Class (more on that below). For instance in our example above we could call the super classes function ```foo``` using the following syntax: ```javascript var NewClass = new Class({ initialize: function( msg ) { console.log( msg ); }, foo: function() { console.log( 'I am foo of base class' ); } }); var NewNewClass = new Class({ initialize: function() { console.log( 'I AM CONSTRUCTOR NEW NEW' ); this.parent( 'I AM CONSTRUCTOR ** said with transformer voice **' ); }, Extends: NewClass, foo: function() { console.log( 'I am foo of sub class' ); this.parent(); } }); ``` If for some reason a class you've extended already has a property or function named parent it wont be overwritten. However you you can still have this same functionality by using a utility function built onto Class. ```Class.parent( this );``` The only difference is that you have to explicetely define the scope of the function you'll be calling from. Also note that ```this.parent();``` or ```Class.parent( this );``` will work for constructors, getters and setters also. Getters and setters? getters and setters ------------------- Yep with this library you can quickly define getters and setters. This is how you'd define getters and setters: ```javascript var TiredOfTheAboveExample = new Class({ _myProp: 0, _secondProp: 'I EXIST', myProp: { get: function() { return this._prop; }, set: function( value ) { this._prop = value; } }, secondProp: { get: function() { return this._secondProp; }, set: function( value ) { this._secondProp = value; } } }); ```