您的位置:首页 > Web前端 > JavaScript

JavaScript类的几种写法

2011-07-28 14:02 330 查看
我们常用的有以下几种方法来用JavaScript写一个“类”:

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本,须精读)







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: