Javascript當(dāng)然也不例外,可是關(guān)于對(duì)象的引用問(wèn)題,你考慮過(guò)么?通常的做法是一系列對(duì)象共享類(lèi)的方法,而不是為每個(gè)對(duì)象復(fù)制一份函數(shù)。下面看看為每個(gè)對(duì)象復(fù)制一份函數(shù)的做法。
代碼如下:
var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
this.showmsg=function()
{
alert("name:"+this.name+"/n"+"age:"+this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name); //liu
var objecttwo=new myobject('lin',20);
alert(objecttwo.name); //lin
alert(objecttwo.showmsg());
var objectthree=new myobject('lhking',22);
alert(objectthree.showmsg());
看起來(lái)不錯(cuò),用起來(lái)也不錯(cuò),對(duì)象之間互相沒(méi)有任何干擾,也能正常完成工作,一切看起來(lái)理所當(dāng)然,但是你每次產(chǎn)生一個(gè)新對(duì)象的時(shí)候,腳本引擎都會(huì)給對(duì)象復(fù)制一份屬性和方法,有沒(méi)有覺(jué)得這樣很浪費(fèi)內(nèi)存呢?在客戶端的這種對(duì)象的復(fù)制方式,極其容易造成內(nèi)存泄露,因?yàn)槊看萎a(chǎn)生新的實(shí)例都會(huì)復(fù)制所有的屬性和方法,占用大量的內(nèi)存。
在大型JavaScript應(yīng)用中首先考慮的就是內(nèi)存問(wèn)題。
正確的使用方法是用prototype關(guān)鍵字來(lái)定義一個(gè)類(lèi)的方法或者屬性
代碼如下:
var myobject=function(param1,param2)
{
this.name=param1;
this.age=param2;
myobject.prototype.showmsg=function()
{
alert("name:"+this.name+"/n"+"age:"+this.age);
}
}
var objectone=new myobject('liu',20);
alert(objectone.name);
var objecttwo=new myobject('lin',20);
alert(objecttwo.name);
alert(objecttwo.showmsg());
var objectthree=new myobject('lhking',22);
alert(objectthree.showmsg);
這樣的話,你創(chuàng)建的對(duì)象之間可以共用方法,也就是showmsg()函數(shù)只定義一次,其它的對(duì)象共用這一個(gè)方法,而不是復(fù)制出自己的方法。
Javascript中的prototype已經(jīng)說(shuō)完。
看看JavaScript中的對(duì)象擴(kuò)展
代碼如下:
function rand(x)
{
return Math.ceil(Math.random()*x);
}
生成隨機(jī)數(shù)組的一個(gè)擴(kuò)展方法
Array.prototype.random=function()
{
for(var i=(this.length-1);i>1;i--)
{
var j=rand(this.length-1);
var cache=this[i];
this[i]=this[j];
this[j]=cache;
}
}
var array=new Array("1","2","3","4","5");
for(var a in array)
{
alert(array[a]);
}
array.random();
for(var b in array)
{
alert(array[b]);
}
再看看對(duì)象反射
反射是一種對(duì)象的機(jī)制,它允許你在完全不了解對(duì)象的情況下了解它的屬性和方法,通常情況下,程序員對(duì)于自己所操縱的對(duì)象是如何組成的是非常了解的,但是在某些特殊情況下使用某個(gè)其他人寫(xiě)的復(fù)雜的對(duì)象的時(shí)候,我們需要快速了解這個(gè)對(duì)象的屬性和方法,就需要用到反射的機(jī)制,當(dāng)然反射的應(yīng)用并不是局限于此,這里只是介紹反射在Javascript中的使用方法.