Object oriented Javascript with CommonJS in Titanium app
Rabu, 7 Ogos 2013, 3:10 pm0
Class definition
// class definition + commonjs module function ClassName() { // code... } module.exports = ClassName;
Use normal javascript function as class definition. Follow certain class / function naming convention to make sure you are not confused between a class or a function. For example, class name use Pascal case (ClassName
), while function name use camel case (isFunctionName
).
Public / private methods
By utilising the scope of function or variable definition, we can make that function/variable to be public or private
function ClassName() { // public method this.getData = function() {} // private method function processData() {} }
After instantiating ClassName, we can invoke public method on the object. Private method will never be accessible outside of the class scope
var cls = new ClassName(); cls.getData();
Public / private properties / variables
function ClassName(args) { // `args` will be private variable // private properties/variables var pageNum = 1; // public properties this.version = 1.0; // getter this.getPageNum = function() { return pageNum; }; // setter this.setPageNum = function(num) { pageNum = num; }; }
Similar to public method, only public properties are accessible from the object created. Developer can use getter/setter method to access private properties. Getter/setter method is useful if you want to keep private variables from being modified outside of the class.
It’s a good practice to use getter/setter on object properties, because we can control who can modify the object properties and when it is modified by external component, we can customize the behavior.
// for example, here is method set the page number of an object. // in this setter method, we can customize the behavior in case // the external component provide invalid input this.setPageNum = function(num) { if (num < 1) { num = 1; } if (num > maxNum) { num = maxNum; } pageNum = num; }
Static method/properties
ClassName.getName = function() {}; ClassName.appName = 'test'; // static properties can also used as constant ClassName.APP_ID = 'xxx';
Inheritance
There are no direct way to achieve class inheritance similar to what Java, Python or other languages that have true OOP feature. In Javascript however, we can extend an object functionality by defining it in another class.
function NewClassName() { var self = new ClassName(); // extend object with new method self.processSomething = function() {}; return self; }
Another way to customize a class is that class must provide some kind of abstraction. So that when instantiating the class, we can pass some arguments to it to modify its behavior (kind of polymorphism).
function AnotherClassName() { var self = new ClassName({ id: 1, name: 'abc', onClick: onClick }); function onClick() { // code... } self.doSomething = function() {}; return self; } // using the child class, we still can invoke methods from parent class var acn = new AnotherClassName(); acn.getData(); acn.doSomething();
4 Ogos 2013