这几天老大天天嚷嚷要重构我们写的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
终于,写完了,黑网吧这可恶的烂键盘,费老大劲才能敲下一个键,有时按下去又卡住弹不上来,“老板,这键盘该换了”
太影响心情了.....