最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript面向?qū)ο笾o態(tài)與非靜態(tài)類

 更新時間:2010年02月03日 16:23:45   作者:  
使用JavaScript面向?qū)ο笸耆鲇谂既?,因為大部分時間我都是在無圖形界面的環(huán)境下工作,有時候就算是介入了web客戶端的工作的時候,在寫js和ajax時,最多的也只是寫寫function,從沒有考慮過要使用JavaScript面向?qū)ο筮@么高級的技巧。
直到有那么一天,我開始在js中拼湊DOM標簽,而且需要不停的拼湊,我發(fā)現(xiàn)我的代碼變得愈發(fā)的丑陋,不僅上是代碼簡潔的問題,甚至有時候還引發(fā)了性能問題。長此以往,不出三個月,上帝都將會不知道我寫過些什么,本篇的目的完全出于記錄使用心得。
首先,還是來看一下促使我改變書寫JavaScript習(xí)慣的垃圾代碼,在練習(xí)、測試、調(diào)試、甚至正式項目中,大量的充斥著下面的代碼。
復(fù)制代碼 代碼如下:

Function finduser(userId)
{
}
Function showmessage(msg)
{
Var message=”提示,出錯了,錯誤原因”+msg;
Alert(message);
}
Function append(obj)
{
Var onclick=”createdom()”;
Var title=”你好”;
$(obj).append(“<a href='javascript:void(0)' onclick='”+onclick+”' title='”+title+”'>”+title+”</a>”);
}

不要告訴我你沒有見過上面的代碼,說實話,上面的代碼確實寫得快,調(diào)用簡單,如果前兩個函數(shù)還不足以引發(fā)你的憤慨,那么第三個函數(shù)應(yīng)該讓你有點想問候?qū)戇@代碼創(chuàng)建者的沖動了。是的,第三個函數(shù)直接觸發(fā)了我決定使用面向?qū)ο蟆?
實際上,我完全可以把第三個函數(shù)改造成下面這樣。
復(fù)制代碼 代碼如下:

function append(obj)
{
var a=document.craeteElement(“a”);
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}

這樣如何?有進步吧,好,這就是我想要的代碼,但是還不夠簡潔。我希望可以把創(chuàng)建DOM對象封裝到一個類中,并且把以上的三個方法都裝到一個對象中;那好吧,動手起來是很簡單的事情,這種工作不需要上網(wǎng)搜索代碼和示例的,直接應(yīng)用C#的面向?qū)ο笏季S就可以完成。
首先是封裝以上的三個方法到一個對象中,封裝很簡單,應(yīng)該不用我多廢話的,直接上代碼。

封裝后的三個函數(shù)
復(fù)制代碼 代碼如下:

User={
Function finduser(userId)
{
},
Function showmessage(msg)
{
Var message=”提示,出錯了,錯誤原因”+msg;
Alert(message);
},
Function append(obj)
{
Var a=document.craeteElement(“a”);
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}


只需要聲明一個User變量來存儲上面的三個方法即可,不同的方法間使用逗號分隔,需要注意的是,這時候的User是一個靜態(tài)的類,無構(gòu)造函數(shù)或者構(gòu)造函數(shù)私有(我猜的),反正不可new了。
其次,我再創(chuàng)建一個封裝創(chuàng)建DOM對象的靜態(tài)類,代碼如下:

復(fù)制代碼 代碼如下:

createElement={
element=function(targetName){return document.createElement(targetName);},
a=document. createElement(“a”)
}

相當(dāng)簡單,這樣我就可以測試一下上面的CreateElement對象是否可正常工作,這次測試是在append方法中進行測試。append方法再次被改造成下面的代碼。

復(fù)制代碼 代碼如下:

function append(obj)
{
Var a= createElement .a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}

目前看來,append工作得相當(dāng)?shù)牧己?,好吧,我需要作出一點小改動,我需要在append函數(shù)中創(chuàng)建三個a并把它依次添加到obj對象中,代碼如下:

代碼
復(fù)制代碼 代碼如下:

function append(obj)
{
For(i=0;i<3;i++)
{
Var a= createElement .a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}

最后顯示的結(jié)果是obj對象中只得到了一個a我十分的不理解,這一個a讓我覺得我又回到了C#的懷抱,多么美好呀,經(jīng)過分析,當(dāng)我通過Var a= CreateElement .a;
第一次調(diào)用在CreateElement.a來獲取a對象時,a屬性中的document.createElement(“a”)就已經(jīng)把a對象駐留到內(nèi)存中,這之后不管我再怎么調(diào)用CreateElement.a,實際上都只是得到了內(nèi)存中a的一個引用,改變的都竟然是同一個對象,這就是靜態(tài)類的特別之處,但是,當(dāng)我通過調(diào)用CreateElement.element函數(shù)來獲取對象時,每次我得到的都是一個新的對象,方法不會保存對象的引用,這是肯定的,解決方法就是通過調(diào)用CreateElement.element函數(shù)來創(chuàng)建新的對象,但是這種方法非面向?qū)ο笸扑]。
另外一種比較好的解決辦法是使用非靜態(tài)類,即實體類的方式,創(chuàng)建非靜態(tài)類的方式也是相當(dāng)?shù)暮唵危a如下:

復(fù)制代碼 代碼如下:

createElement=function(){
element=function(targetName){return document.createElement(targetName);};
a=document. createElement(“a”);
}

直接聲明createElement對象,并使之有構(gòu)造函數(shù),成員間以分號進行分隔,當(dāng)然如果你喜歡,還可以直接這樣寫,也是沒有一樣的效果。

復(fù)制代碼 代碼如下:

function createElement (){
element=function(targetName){return document.createElement(targetName);};
a=document. createElement(“a”);
}

經(jīng)過上面的聲明,我們就可以在append函數(shù)中像C#一樣使用createElement類來創(chuàng)建DOM對象了。

函數(shù)
復(fù)制代碼 代碼如下:

function append(obj)
{
for(i=0;i<3;i++)
{
var ele=new createElement();
var a=ele.a;
a.title=”你好”;
a.href=”javascript:void(0);”;
a.innerHTML=a.title;
a.click=function(){createdom();};
$(obj).append(a);
}
}

這樣每次new createElement()都是一個新的對象,不存在引用的問題了。
實際上,上面提到的就是Javascript中靜態(tài)類和非靜態(tài)類的區(qū)別;當(dāng)然也從中得知,使用靜態(tài)類非靜態(tài)類的效率上還是有些差別的,而且調(diào)用的時候肯定也是靜態(tài)類方便一些,如果不計較引用沖突問題,我覺得靜態(tài)類應(yīng)該是首選的。

相關(guān)文章

  • javascript面向?qū)ο笕腴T基礎(chǔ)詳細介紹

    javascript面向?qū)ο笕腴T基礎(chǔ)詳細介紹

    本文章介紹了js中常用的對象包括有JavaScript對象簡介 字符串對象 date() 數(shù)組 數(shù)學(xué)對象 函數(shù)對象 應(yīng)用介紹,有需要了解的同學(xué)可參考一下
    2012-09-09
  • 面向?qū)ο蟮腏avascript之二(接口實現(xiàn)介紹)

    面向?qū)ο蟮腏avascript之二(接口實現(xiàn)介紹)

    接口是面向?qū)ο驤avascript工具箱中最有用的特性之一。我們都知道GOF在設(shè)計模式中說到:面向接口編程,而非面向?qū)崿F(xiàn)編程
    2012-01-01
  • JavaScript 原型與繼承說明

    JavaScript 原型與繼承說明

    在上一遍我們簡單的介紹了怎么樣使用JavaScript進行構(gòu)造函數(shù)的書寫,現(xiàn)在來認識下JavaScript的構(gòu)造函數(shù)其原理,主要是關(guān)注與原型的概念,首先看如下代碼。
    2010-06-06
  • JavaScript之信息的封裝 js對象入門

    JavaScript之信息的封裝 js對象入門

    下面對代碼的封裝是比較常用的,也比較好理解,只有先掌握了這些,才能更深入的了解面向?qū)τ谝约癹son格式的定義方法。
    2010-04-04
  • Javascript 面向?qū)ο缶幊?coolshell)

    Javascript 面向?qū)ο缶幊?coolshell)

    Javascript是一個類C的語言,他的面向?qū)ο蟮臇|西相對于C++/Java比較奇怪,但是其的確相當(dāng)?shù)膹姶?,?Todd 同學(xué)的“對象的消息模型”一文中我們已經(jīng)可以看到一些端倪了
    2012-03-03
  • [推薦]javascript 面向?qū)ο蠹夹g(shù)基礎(chǔ)教程

    [推薦]javascript 面向?qū)ο蠹夹g(shù)基礎(chǔ)教程

    看了很多介紹javascript面向?qū)ο蠹夹g(shù)的文章,很暈.為什么?不是因為寫得不好,而是因為太深奧. javascript中的對象還沒解釋清楚怎么回事,一上來就直奔主題,類/繼承/原型/私有變量....
    2009-03-03
  • javascript 模式設(shè)計之工廠模式學(xué)習(xí)心得

    javascript 模式設(shè)計之工廠模式學(xué)習(xí)心得

    接口的實現(xiàn),從而使不同子類可以被同等的對待,恰當(dāng)?shù)氖褂霉S模式,但不要拘泥與形式,理解本質(zhì)。
    2010-04-04
  • 最新評論

    青海省| 略阳县| 平定县| 临泉县| 西乌| 科技| 垦利县| 夏邑县| 伊川县| 蒙城县| 黑龙江省| 夏津县| 栾川县| 富裕县| 土默特右旗| 文成县| 文山县| 宁津县| 平谷区| 云梦县| 徐水县| 湘阴县| 积石山| 镇康县| 磴口县| 花垣县| 阿坝| 辽中县| 特克斯县| 东山县| 内江市| 合阳县| 耒阳市| 安阳市| 墨脱县| 潢川县| 荣昌县| 福泉市| 集贤县| 金秀| 榆社县|