javascript面向对象编程规范

来源:互联网 发布:行知职高贴吧 编辑:程序博客网 时间:2024/05/14 07:39

javascript在语言上的灵活性导致了javascript脚本一直以来很难被复用,但笔者认为这并不完全是javascript自身的问题,web开发人员在开发中没有遵循一定的规范也是很重要的原因,当然为javascript制定一个公认的完整的规范几乎是不可能的,不过在面向对象这个特定的领域,制定一个相对可用的规范是可以的。

对于笔者制定的以下规范,有几点需要说明:首先,为了避免对象间可能出现的交叉影响,不引入继承的概念;其次,为了降低规范的复杂性,不使用包导入的方法引用类库,而保留html标记引用的方法。

//根命名空间和子命名空间
var figcn={};//重复定义命名空间会清空该命名空间内的所有代码,所以根命名空间的命名最好跟公司或项目代号相关,最好不要使用com、cn等命名,这跟java的包命名方式是有区别的。
figcn.io={};
//类
figcn.util=function(){};
//带构造函数的类
figcn.util=function()
{
if(arguments.length==0)
    this.name="default";
else
    this.name=arguments[0];
};
//类的静态字段
figcn.util.name="figcn.util";
//类的静态函数
figcn.util.showmsg=function(){alert(arguments[0]);};
//类的成员字段
figcn.util.prototype.classname="util";//可以在类的成员函数中以this.classname引用
figcn.util.prototype.namespace="figcn";
//类的成员函数
figcn.util.prototype.getFullName=function()
{
return this.namespace+"."+this.classname;
};
figcn.util.prototype.showFullName=function()
{
alert(this.getFullName());
};

 

//实例化类
var ut=new figcn.util();
//调用类的成员函数
ut.showFullName();
//引用类的成员字段
alert(ut.classname);
alert(ut.name);
//调用类的静态函数
figcn.util.showmsg("ut.showmsg");
//引用类的静态字段
alert(figcn.util.name);

附录:javascript代码调试器
jsDebugger.hta
<html>
<title>JavaScript Debug Tool</title>
<script src="figcn.js"></script>
<script src="figcn.io.js"></script>
<body>
<div>
<input type=button value=Run onclick="run()">
<input type=button value=Refresh onclick="location.reload()">
<input type=button value=Save onclick="save()">
<input type=file onchange="loadfile(this.value)" name=f>
<span id=spanx></span>
</div>
<div>
<textarea cols=100 rows=40 id=txt></textarea>
</div>
<script>
function run()
{
 eval(document.all.txt.value);
}
function save()
{
 document.all.spanx.innerText="Saving...";
 if(document.all.f.value=="")
  figcn.io.File.save(document.all.txt.value,figcn.DateTime.toString()+".txt");
 else
  figcn.io.File.save(document.all.txt.value,document.all.f.value);
 document.all.spanx.innerText="Saved.";
}

function loadfile(path)
{
 document.all.txt.value=figcn.io.File.load(path);
}

</script>
</body>
</html>

引用文件一:
figcn.js
var figcn={};
//----DateTime类----------------
figcn.DateTime=function(){};
figcn.DateTime.toString=function()
{
    var d=new Date();
    var year=d.getYear();
    var month=d.getMonth()+1;if(month<10) month = "0" +month;
    var day =d.getDate();if(day<10)day="0"+day;
    var hour=d.getHours();if(hour<10) hour="0"+hour;
    var minute=d.getMinutes();if(minute<10) minute ="0" +minute;
    var second=d.getSeconds();if(second<10) second ="0" +second;
    var x=year+month+day+hour+minute+second;
    return x;
}

引用文件二:
figcn.io.js
figcn.io={};
//----File类----------------
figcn.io.File=function(){};
figcn.io.File.load=function(path)
{
 var fso, oTextStream,s;
   var ForReading = 1;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   oTextStream = fso.OpenTextFile(path, ForReading);
 s=oTextStream.ReadAll();
   oTextStream.Close();
   oTextStream=null;
   fso=null;
   return s;
};
figcn.io.File.save=function(txt,path)
{
 var fso, tf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   tf = fso.CreateTextFile(path, true);
   tf.Write(txt) ;
   tf.Close();
};