資源描述:
《再談javascript面向?qū)ο缶幊獭酚蓵?huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、再談javascript面向?qū)ο缶幊?3人收藏此新聞,我要收藏
2、?新聞投遞aoniao發(fā)布于:2012年02月28日(13評(píng))前言:雖有陳皓《Javascript面向?qū)ο缶幊獭分橛裨谇埃俏疫€是忍不住再畫蛇添足的補(bǔ)上一篇文章,主要是因?yàn)閖avascript這門語言魅力。另外這篇文章是一篇入門文章,我也是才開始學(xué)習(xí)Javascript,有一點(diǎn)心得,才想寫一篇這樣文章,文章中難免有錯(cuò)誤的地方,還請各位不吝吐槽指正吐槽Javascript初次接觸Javascript,這門語言的確會(huì)讓很多正規(guī)軍感到諸多的不適,這種不適來自于Javasc
3、ript的語法的簡練和不嚴(yán)謹(jǐn),這種不適也來自Javascript這個(gè)悲催的名稱,我在想網(wǎng)景公司的Javascript設(shè)計(jì)者在給他起名稱那天一定是腦殼進(jìn)水了,讓Javascript這么多年來受了這么多不白之冤,人們都認(rèn)為他是Java的附屬物,一個(gè)WEB玩具語言。因此才會(huì)有些人會(huì)對(duì)Javascript不屑,認(rèn)為Javascript不是一門真正的語言,但是這此他們真的錯(cuò)了。Javascript不僅是一門語言,是一門真真正正的語言,而且他還是一門里程碑式的語言,他獨(dú)創(chuàng)多種新的編程模式原型繼承,閉包(作者注:閉包不是JS首創(chuàng),應(yīng)該Schem
4、e首創(chuàng),prototypalinheritance和dynamicobjects是self語言首創(chuàng),Javascript的首創(chuàng)并不精彩,謝謝網(wǎng)友的指正。),對(duì)后來的動(dòng)態(tài)語言產(chǎn)生了巨大的影響。做為當(dāng)今最流行的語言(沒有之一),看看git上提交的最多的語言類型就能明白。隨著HTML5的登場,瀏覽器將在個(gè)人電腦上將大顯身手,完全有替換OS的趨勢的時(shí)候,Javascript做為瀏覽器上的一門唯一真真的語言,如同C之于unix/linux,java之于JVM,Cobol之于MainFrame,我們也需要來重新的認(rèn)真地認(rèn)識(shí)和審視這門語言。另外
5、Javascript的正式名稱是:ECMAScript,這個(gè)名字明顯比Javascript帥太多了!言歸正傳,我們切入主題——Javascript的面向?qū)ο缶幊獭R凧avascript的面向?qū)ο缶幊?,我們第一步要做的事情就是忘記我們所學(xué)的面向?qū)ο缶幊獭鹘y(tǒng)C++或Java的面向?qū)ο笏季S來學(xué)習(xí)Javascript的面向?qū)ο髸?huì)給你帶來不少困惑,讓我們先忘記我們所學(xué)的,從新開始學(xué)習(xí)這門特殊的面向?qū)ο缶幊?。既然是OO編程,要如何來理解OO編程呢,記得以前學(xué)C++,學(xué)了很久都不入門,后來有幸讀了《InsideTheC++ObjectMod
6、el》這本大作,頓時(shí)豁然開朗,因此本文也將以對(duì)象模型的方式來探討的Javascript的OO編程。因?yàn)镴avascript對(duì)象模型的特殊性,所以使得Javascript的繼承和傳統(tǒng)的繼承非常不一樣,同時(shí)也因?yàn)镴avascript里面沒有類,這意味著Javascript里面沒有extends,implements。那么Javascript到底是如何來實(shí)現(xiàn)OO編程的呢?好吧,讓我們開始吧,一起在Javascript的OO世界里來一次漫游首先,我們需要先看看Javascript如何定義一個(gè)對(duì)象。下面是我們的一個(gè)對(duì)象定義:1varo={}
7、;還可以這樣定義一個(gè)對(duì)象12functionf(){}對(duì),你們沒有看錯(cuò),在Javascript里面,函數(shù)也是對(duì)象。當(dāng)然還可以1vararray1=[1,2,3];數(shù)組也是一個(gè)對(duì)象。其他關(guān)于對(duì)象的基本的概念的描述,還是請各位親們參見陳皓《Javascript面向?qū)ο缶幊獭肺恼?。?duì)象都有了,唯一沒有的就是class,因?yàn)樵贘avascript里面是沒有class關(guān)鍵字的,算好還有function,function的存在讓我們可以變通的定義類,在擴(kuò)展這個(gè)主題前,我們還需要了解一個(gè)Javascript對(duì)象最重要的屬性,__proto__成
8、員。__proto__成員嚴(yán)格的說這個(gè)成員不應(yīng)該叫這個(gè)名字,__proto__是Firefox中的稱呼,__proto__只有在Firefox瀏覽器中才能被訪問到。做為一個(gè)對(duì)象,當(dāng)你訪問其中的一個(gè)成員或方法的時(shí)候,如果這個(gè)對(duì)象中沒有這個(gè)方法或成員,那么Javascript引擎將會(huì)訪問這個(gè)對(duì)象的__proto__成員所指向的另外的一個(gè)對(duì)象,并在那個(gè)對(duì)象中查找指定的方法或成員,如果不能找到,那就會(huì)繼續(xù)通過那個(gè)對(duì)象的__proto__成員指向的對(duì)象進(jìn)行遞歸查找,直到這個(gè)鏈表結(jié)束。好了,讓我們舉一個(gè)例子。比如上上面定義的數(shù)組對(duì)象array
9、1。當(dāng)我們創(chuàng)建出array1這個(gè)對(duì)象的時(shí)候,array1實(shí)際在Javascript引擎中的對(duì)象模型如下:array1對(duì)象具有一個(gè)length屬性值為3,但是我們可以通過如下的方法來為array1增加元素:1array1.push(4);push這個(gè)