javascript中的對象JS作為一種動態語言,在語法上有相當大的自由度,所以造成了一種功能,有N種寫法的局面。
在JS中實現OOP,一般來說有兩種方法:
第一種:使用this關鍵字
functionClass1()
{
this.onclick=function(e)
{
for(vari=0;i<1000;i++)
{
vara=newDate();
}
}
}
使用this.的方法可以很靈活地給對象添加屬性和方法,而且和大部分的OOP語言都相似,甚至在運行中都可以添加。
第二種:使用prototype關鍵字
functionclickFunc(e)
{
for(vari=0;i<1000;i++)
{
vara=newDate();
}
}
functionClass2()
{
}
Class2.prototype.onclick=clickFunc;
這種用法上來講就沒有第一種顯得靈活。不過在一個對象new出來之前,也是一樣可以隨時添加一個對象的屬性和方法。
可是他們並不是相等的,相對來說,我更喜歡第一種,因為第一種方法相對比較集中,比較容易閱讀代碼。但是在運行的時候,他們運行的效率卻差別相當地大。以下讓我們看一下測試代碼吧:
vartotal=newArray();
functionTest1()
{
vara=newDate();
for(vari=0;i<10000;i++)
{
varc=newClass1();
//total.push(c);
}
varb=newDate();
alert(b.getTime()-a.getTime());
}
functionTest2()
{
vara=newDate();
for(vari=0;i<10000;i++)
{
varc=newClass2();
//total.push(c);
}
varb=newDate();
alert(b.getTime()-a.getTime());
}
第一步作執行時間的測試:發現Test1()需要142ms,而Test2()僅需50ms.發現時間效率上來說,prototype的方法相對this來說,更加高效。