黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

JavaScript面向?qū)ο蟮膬煞N書寫方法以及差別
javascript中的對象js作為一種動態(tài)語言,在語法上有相當(dāng)大的自由度,所以造成了一種功能,有n種寫法的局面。

在js中實(shí)現(xiàn)oop,一般來說有兩種方法:

第一種:使用this關(guān)鍵字

function class1()
{
    this.onclick = function(e)
    {
        for (var i=0; i < 1000; i++)
        {
            var a = new date();
        }
    } 



使用this.的方法可以很靈活地給對象添加屬性和方法,而且和大部分的oop語言都相似,甚至在運(yùn)行中都可以添加。

第二種:使用prototype關(guān)鍵字

function clickfunc(e)
{
    for (var i=0; i < 1000; i++)
    {
        var a = new date();
    }


function class2()




class2.prototype.onclick = clickfunc; 

這種用法上來講就沒有第一種顯得靈活。不過在一個對象new出來之前,也是一樣可以隨時添加一個對象的屬性和方法。

可是他們并不是相等的,相對來說,我更喜歡第一種,因為第一種方法相對比較集中,比較容易閱讀代碼。但是在運(yùn)行的時候,他們運(yùn)行的效率卻差別相當(dāng)?shù)卮蟆R韵伦屛覀兛匆幌聹y試代碼吧:

var total = new array(); 

function test1()
{
    var a = new date();
    for (var i=0; i < 10000; i++)
    {
        var c = new class1();
        //total.push(c);
    }
    var b = new date();
    alert(b.gettime()-a.gettime());


function test2()
{
    var a = new date();
    for (var i=0; i < 10000; i++)
    {
        var c = new class2();
        //total.push(c);
    }
    var b = new date();
    alert(b.gettime()-a.gettime());


第一步作執(zhí)行時間的測試:發(fā)現(xiàn)test1()需要142ms,而test2()僅需50ms.發(fā)現(xiàn)時間效率上來說,prototype的方法相對this來說,更加高效。 

javascript的對象第二步作內(nèi)存占用的測試,把total.push(c);這行的注釋去掉,之所以要把它們加入到數(shù)組里面去,防止創(chuàng)建的時候,對象比較多的時候,沒有被引用的對象被gc了。結(jié)果發(fā)現(xiàn)差距不是一般的大,第一種方法要占用二三十m的內(nèi)存,而第二種只需要一百多k。
javascript創(chuàng)建對象
成因推斷:
在處理這兩種代碼的時候,第一種,js的解析器,給每個對象都創(chuàng)建一個單獨(dú)的方法,這樣增加了內(nèi)存的開銷,同時創(chuàng)建方法的時候,增加了運(yùn)行時間。第二種,js的解析器和大部分的oop編譯器一樣的,把對象的數(shù)據(jù)段和方法段分開存儲了,對于對象的私有數(shù)據(jù),則是每個對象一份,而這些方法,則是放在公共的方法段里,所以可以減少運(yùn)行時間和內(nèi)存的開銷。
相關(guān)文章