这几天老大天天嚷嚷要重构我们写的javascript,抱怨代码太混乱,可读性差,维护困难,要求javascript也按面对象的思想来重构,由于组里项目大多的javascript,css等客户端工作是另一同事在负责,该同事又特忙无法重构,老大也就只是提建议并未立即组织人员实施重构。但是我前些日子也改过这个项目的一些客户端的代码,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水
1.定义namespace
Namesapce.js 1 Namespace = new Object(); 2 Namespace.register = function(fullname){ 3 try 4 { 5 var nsArray = fullname.split("."); 6 var strNS = ""; 7 var strEval = ""; 8 for(var i=0;i<nsArray.length;i++){ 9 if(strNS.length >0)10 strNS += ".";11 strNS += nsArray[i];12 strEval += " if(typeof("+ strNS +") =='undefined') " + strNS + " = new Object(); ";13 }14 if(strEval != "") eval(strEval);15 16 }catch(e){alert(e.message);}17 18 }
2.Employee.js
Employee.js //注册命名空间Namespace.register("MyCompany");//1.类:雇员MyCompany.Employee = function(empName){ this.Name = empName; this.Salary = 1000; this.Position = "cleaner";}MyCompany.Employee.prototype.ShowName = function(){ return "I'm "+this.Name+",my salary is $" + this.Salary;}MyCompany.Employee.prototype.Work = function(){ return "I'm a "+ this.Position +",I'm cleaning all day!"}//2.类:程序员MyCompany.Developer = function(empName){ //继承父类属性 MyCompany.Employee.call(this,empName); //覆盖父类属性 this.Position = "developer"; //扩展属性 this.Technology = "C#"; }//继承父类原型方法MyCompany.Developer.prototype = new MyCompany.Employee();//覆盖父类方法MyCompany.Developer.prototype.Work = function(){ return "I'm a "+ this.Position +",i'm good at "+ this.Technology +",i'm coding all day!"}
源代码:/Files/BenWong/demo.zip
终于,写完了,黑网吧这可恶的烂键盘,费老大劲才能敲下一个键,有时按下去又卡住弹不上来,“老板,这键盘该换了”
太影响心情了.....
转载于:https://www.cnblogs.com/BenWong/archive/2009/10/29/1592592.html
相关资源:数据结构—成绩单生成器