JavaScript类的几种写法
2011-07-28 14:02
330 查看
我们常用的有以下几种方法来用JavaScript写一个“类”:
[code]this.name=iName;//public
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
以上的属性和方法都是public的。下面的例子给出private和public的属性和方法。
[code]//privatefield
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
调用:(newPerson("xiao","10")).ShowStudent();
[code]c.prototype={
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
[code]this.name=iName;
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
[code]this.name=iName;
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
以上的实现方法如果不用_initialized的方法,也可以指向一个外部函数,道理一样。
[code]MyNamespace.Singleton=(function(){
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
1.构造函数(public属性和方法)
functionPerson(iName,iAge){
[code]this.name=iName;//public
this.age=iAge;//public
this.ShowStudent=function(){//public
alert(this.name);
};
}
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
以上的属性和方法都是public的。下面的例子给出private和public的属性和方法。
2.构造函数(public,private属性和方法)
functionPerson(iName,iAge){
[code]//privatefield
varname=iName;
varage=iAge;
//privatemethod
varprivatefn=function(){
alert(name);
}
return{
//publicfield
Name:"hello"+name,
Age:"hello"+age,
ShowStudent:function(){
privatefn();
alert(this.Name);
}
};
}
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
调用:(newPerson("xiao","10")).ShowStudent();
3.原型方法(prototype)
functionc(){}
[code]c.prototype={
name:"initvaluea",
setName:function(iName){
this.name=iName;
},
getName:function(){
alert('hellofromc,name:'+this.name);
}
};
(newc).getName();//输出hellofromc,name:initvaluea
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
4.构造函数+原型方法(prototype)
functionPerson(iName){
[code]this.name=iName;
};
Person.prototype={
getName:function(){
returnthis.name;
}
};
//调用
varb=newPerson("jack");
alert(b.getName());
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
5.构造函数+原型方法(prototype)-节省内存的写法
functionPerson(iName,iAge){
[code]this.name=iName;
this.age=iAge;
//对象实例都共享同一份方法不造成内存浪费
if(typeofPerson._initialized=="undefined"){
Person.prototype.ShowStudent=function(){
alert(this.name);
};
Person._initialized=true;
}
}
//调用
(newPerson("jack","20")).ShowStudent();
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
以上的实现方法如果不用_initialized的方法,也可以指向一个外部函数,道理一样。
6.JavaScript类的单例(Singleton)模式写法
varMyNamespace={};
[code]MyNamespace.Singleton=(function(){
varuniqueInstance;//Privateattributethatholdsthesingleinstance.
functionconstructor(){//Allofthenormalsingletoncodegoeshere.
//Privatemembers.
varprivateAttribute1=false;
varprivateAttribute2=[1,2,3];
functionprivateMethod1(){
//...
}
functionprivateMethod2(args){
//...
}
return{//Publicmembers.
publicAttribute1:true,
publicAttribute2:10,
publicMethod1:function(){
//...
},
publicMethod2:function(args){
//...
}
}
}
return{
getInstance:function(){
if(!uniqueInstance){//Instantiateonlyiftheinstancedoesn'texist.
uniqueInstance=constructor();
}
returnuniqueInstance;
}
}
})();
//调用:
MyNamespace.Singleton.getInstance().publicMethod1();
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
JavaScript好书推荐(只推3本,须精读)
相关文章推荐
- JavaScript类的几种写法
- JS产生随机数的几种写法
- 整理最近新学到的几种sql写法(二)“取得每个班里的前两名”
- html中按钮的几种不同写法
- Hibernate中同一查询的几种写法
- Javascript中for循环语句的几种写法总结对比
- 常用几种数据库,取前10条记录的sql语句写法
- java冒泡排序的几种写法
- 几种常用数据库(SQLServer Oracle db2 mysql等)分页SQL的写法总结
- objective-C中单例的几种写法
- 什么是内存溢出与内存泄露,几种常见导致内存泄露的写法
- android listview优化几种写法详细介绍
- Ajax调用后台方法的几种写法(三)UpdatePanel
- JavaScript类的写法
- 分频器的几种写法.[Verilog]
- js函数的几种写法
- 点击事件的几种写法
- 面试中单例模式有几种写法
- ios单例模式的几种写法
- 单例模式的几种写法(包含双检锁写法)