/** * author Redcrow * http://na5cent.blogspot.com * 18/01/2012 */ //annonymous function return value var Robot = (function(){ //-------------------- static scope --------------------------- //private static attribute var _id = 0; //private static methods function _increaseId(){ _id = _id + 1; return _id; } function _resetId(){ _id = 0; } function _currentId(){ return _id; } //-------------------- static scope --------------------------- return { instance : function(name){ //constructor //private attribute var _name = name || ""; //if(name === undefined) _name = ""; else _name = name; //call private static method var _id = _increaseId(); //private methods ------------------------------------------- function _circuit(signal){ //circuit work start //.... console.log("circuit working ... signal [" + signal.first + ", " + signal.second + "]"); if(signal.first === 0 && signal.second === 0){ //go to front //call private method _motorLeft('counterClockwise'); _motorRight('clockwise'); } //... //circuit work end } function _motorLeft(rotate){ //motor left work //... console.log("motor left rotate [" + rotate + "]"); } function _motorRight(rotate){ //motor right work //... console.log("motor right rotate [" + rotate + "]"); } //private methods ------------------------------------------- //privileged methods ---------------------------------------- this.goToFront = function(){ console.log("goToFront"); _circuit({ first : 0, second : 0 }); } this.goBack = function(){ //... //... } this.turnRight = function(){ //... //... } this.turnLeft = function(){ //... //... } this.getRobotId = function(){ return _id; } this.getRobotName = function(){ return _name; } //privileged methods ---------------------------------------- }, //create static methods reference to private method (closure _resetId() ) resetId : _resetId, currentId : _currentId //reference to closure ( _currentId() ) } })(); //utilities function separateLog(count){ for(i=0; i< count/2; i++){ console.log(""); console.log(""); } } /** * example to use */ console.log("***** Before change"); console.log(Robot); //modify class ---------------------------------------------- //add public static method Robot.staticMethod = function(){ console.log("call static method"); }; //add public method (multiple) Robot.instance.prototype = { publicMethod1 : function(){ console.log("call public method1"); }, publicMethod2 : function(){ console.log("call public method2"); } }; //add public method (single) Robot.instance.prototype.publicMethod3 = function(){ console.log("call public method3"); }; //modify class ---------------------------------------------- separateLog(1); console.log("***** After change"); console.log(Robot); separateLog(2); console.log("Test new instance"); console.log("robot1 ----------------------------------------------------------"); var robot1 = new Robot.instance("eibot"); //new instant and set name console.log(robot1.getRobotId()); //id => 1 console.log(robot1.getRobotName()); //name = eibot robot1.goToFront(); separateLog(1); console.log("robot2 ----------------------------------------------------------"); var robot2 = new Robot.instance(); //new instance not set name console.log(robot2.getRobotId()); //id => 2 separateLog(1); console.log("robot3 ----------------------------------------------------------"); var robot3 = new Robot.instance(); console.log(robot3.getRobotId()); //id => 3 separateLog(1); console.log("robot4 ----------------------------------------------------------"); //reset robot id Robot.resetId(); //id => 0 console.log("reset robotId"); var robot4 = new Robot.instance(); console.log(robot4.getRobotId()); //id => 1 separateLog(2); //test call public method robot4.publicMethod1(); robot4.publicMethod2(); robot4.publicMethod3(); //check Robot current id console.log(""); console.log("current robotId => " + Robot.currentId()); //call static method get current id separateLog(2); console.log("id of robot2 => " + robot2.getRobotId()); console.log(robot2); //
วันพฤหัสบดีที่ 17 มกราคม พ.ศ. 2556
javascript encapsulation
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น