|
你看,數(shù)據(jù)代碼間的關(guān)系與物質(zhì)能量間的關(guān)系有著驚人的相似。數(shù)據(jù)也是有慣性的,如果沒(méi)有代碼來(lái)施加外力,她總保持自己原來(lái)的狀態(tài)。而代碼就象能量,他存在的唯一目的,就是要努力改變數(shù)據(jù)原來(lái)的狀態(tài)。在代碼改變數(shù)據(jù)的同時(shí),也會(huì)因?yàn)閿?shù)據(jù)的抗拒而反過(guò)來(lái)影響或改變代碼原有的趨勢(shì)。甚至在某些情況下,數(shù)據(jù)可以轉(zhuǎn)變?yōu)榇a,而代碼卻又有可能被轉(zhuǎn)變?yōu)閿?shù)據(jù),或許還存在一個(gè)類(lèi)似E=MC2形式的數(shù)碼轉(zhuǎn)換方程呢。然而,就是在數(shù)據(jù)和代碼間這種即矛盾又統(tǒng)一的運(yùn)轉(zhuǎn)中,總能體現(xiàn)出計(jì)算機(jī)世界的規(guī)律,這些規(guī)律正是我們編寫(xiě)的程序邏輯。
不過(guò),由于不同程序員有著不同的世界觀,這些數(shù)據(jù)和代碼看起來(lái)也就不盡相同。于是,不同世界觀的程序員們運(yùn)用各自的方法論,推動(dòng)著編程世界的進(jìn)化和發(fā)展。
眾所周知,當(dāng)今最流行的編程思想莫過(guò)于面向?qū)ο缶幊痰乃枷搿槭裁疵嫦驅(qū)ο蟮乃枷肽苎杆亠L(fēng)靡編程世界呢?因?yàn)槊嫦驅(qū)ο蟮乃枷胧状伟褦?shù)據(jù)和代碼結(jié)合成統(tǒng)一體,并以一個(gè)簡(jiǎn)單的對(duì)象概念呈現(xiàn)給編程者。這一下子就將原來(lái)那些雜亂的算法與子程序,以及糾纏不清的復(fù)雜數(shù)據(jù)結(jié)構(gòu),劃分成清晰而有序的對(duì)象結(jié)構(gòu),從而理清了數(shù)據(jù)與代碼在我們心中那團(tuán)亂麻般的結(jié)。我們又可以有一個(gè)更清晰的思維,在另一個(gè)思想高度上去探索更加浩瀚的編程世界了。
在五祖弘忍講授完《對(duì)象真經(jīng)》之后的一天,他對(duì)眾弟子們說(shuō):“經(jīng)已講完,想必爾等應(yīng)該有所感悟,請(qǐng)各自寫(xiě)個(gè)偈子來(lái)看”。大弟子神秀是被大家公認(rèn)為悟性最高的師兄,他的偈子寫(xiě)道:“身是對(duì)象樹(shù),心如類(lèi)般明。朝朝勤拂拭,莫讓惹塵埃!”。此偈一出,立即引起師兄弟們的轟動(dòng),大家都說(shuō)寫(xiě)得太好了。只有火頭僧慧能看后,輕輕地嘆了口氣,又隨手在墻上寫(xiě)道:“對(duì)象本無(wú)根,類(lèi)型亦無(wú)形。本來(lái)無(wú)一物,何處惹塵埃?”。然后搖了搖頭,揚(yáng)長(zhǎng)而去。大家看了慧能的偈子都說(shuō):“寫(xiě)的什么亂七八糟的啊,看不懂”。師父弘忍看了神秀的詩(shī)偈也點(diǎn)頭稱(chēng)贊,再看慧能的詩(shī)偈之后默然搖頭。就在當(dāng)天夜里,弘忍卻悄悄把慧能叫到自己的禪房,將珍藏多年的軟件真經(jīng)傳授于他,然后讓他趁著月色連夜逃走...
后來(lái),慧能果然不負(fù)師父厚望,在南方開(kāi)創(chuàng)了禪宗另一個(gè)廣闊的天空。而慧能當(dāng)年帶走的軟件真經(jīng)中就有一本是《JavaScript真經(jīng)》!
回歸簡(jiǎn)單
要理解JavaScript,你得首先放下對(duì)象和類(lèi)的概念,回到數(shù)據(jù)和代碼的本原。前面說(shuō)過(guò),編程世界只有數(shù)據(jù)和代碼兩種基本元素,而這兩種元素又有著糾纏不清的關(guān)系。JavaScript就是把數(shù)據(jù)和代碼都簡(jiǎn)化到最原始的程度。
JavaScript中的數(shù)據(jù)很簡(jiǎn)潔的。簡(jiǎn)單數(shù)據(jù)只有 undefined, null, boolean, number和string這五種,而復(fù)雜數(shù)據(jù)只有一種,即object。這就好比中國(guó)古典的樸素唯物思想,把世界最基本的元素歸為金木水火土,其他復(fù)雜的物質(zhì)都是由這五種基本元素組成。
JavaScript中的代碼只體現(xiàn)為一種形式,就是function。
注意:以上單詞都是小寫(xiě)的,不要和Number, String, Object, Function等JavaScript內(nèi)置函數(shù)混淆了。要知道,JavaScript語(yǔ)言是區(qū)分大小寫(xiě)的呀!
任何一個(gè)JavaScript的標(biāo)識(shí)、常量、變量和參數(shù)都只是unfined, null, bool, number, string, object 和 function類(lèi)型中的一種,也就typeof返回值表明的類(lèi)型。除此之外沒(méi)有其他類(lèi)型了。
先說(shuō)說(shuō)簡(jiǎn)單數(shù)據(jù)類(lèi)型吧。
undefined: 代表一切未知的事物,啥都沒(méi)有,無(wú)法想象,代碼也就更無(wú)法去處理了。
注意:typeof(undefined) 返回也是 undefined。
可以將undefined賦值給任何變量或?qū)傩裕⒉灰馕读饲宄嗽撟兞浚炊鴷?huì)因此多了一個(gè)屬性。
null: 有那么一個(gè)概念,但沒(méi)有東西。無(wú)中似有,有中還無(wú)。雖難以想象,但已經(jīng)可以用代碼來(lái)處理了。
注意:typeof(null)返回object,但null并非object,具有null值的變量也并非object。
boolean: 是就是,非就非,沒(méi)有疑義。對(duì)就對(duì),錯(cuò)就錯(cuò),絕對(duì)明確。既能被代碼處理,也可以控制代碼的流程。
number: 線性的事物,大小和次序分明,多而不亂。便于代碼進(jìn)行批量處理,也控制代碼的迭代和循環(huán)等。
注意:typeof(NaN)和typeof(Infinity)都返回number 。
NaN參與任何數(shù)值計(jì)算的結(jié)構(gòu)都是NaN,而且 NaN != NaN 。
Infinity / Infinity = NaN 。
string: 面向人類(lèi)的理性事物,而不是機(jī)器信號(hào)。人機(jī)信息溝通,代碼據(jù)此理解人的意圖等等,都靠它了。
簡(jiǎn)單類(lèi)型都不是對(duì)象,JavaScript沒(méi)有將對(duì)象化的能力賦予這些簡(jiǎn)單類(lèi)型。直接被賦予簡(jiǎn)單類(lèi)型常量值的標(biāo)識(shí)符、變量和參數(shù)都不是一個(gè)對(duì)象。
所謂“對(duì)象化”,就是可以將數(shù)據(jù)和代碼組織成復(fù)雜結(jié)構(gòu)的能力。JavaScript中只有object類(lèi)型和function類(lèi)型提供了對(duì)象化的能力。
沒(méi)有類(lèi)
object就是對(duì)象的類(lèi)型。在JavaScript中不管多么復(fù)雜的數(shù)據(jù)和代碼,都可以組織成object形式的對(duì)象。
但JavaScript卻沒(méi)有 “類(lèi)”的概念!
對(duì)于許多面向?qū)ο蟮某绦騿T來(lái)說(shuō),這恐怕是JavaScript中最難以理解的地方。是啊,幾乎任何講面向?qū)ο蟮臅?shū)中,第一個(gè)要講的就是“類(lèi)”的概念,這可是面向?qū)ο蟮闹е_@突然沒(méi)有了“類(lèi)”,我們就象一下子沒(méi)了精神支柱,感到六神無(wú)主。看來(lái),要放下對(duì)象和類(lèi),達(dá)到“對(duì)象本無(wú)根,類(lèi)型亦無(wú)形”的境界確實(shí)是件不容易的事情啊。
這樣,我們先來(lái)看一段JavaScript程序:
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
這段JavaScript程序一開(kāi)始產(chǎn)生了一個(gè)生命對(duì)象life,life誕生時(shí)只是一個(gè)光溜溜的對(duì)象,沒(méi)有任何屬性和方法。在第一次生命過(guò)程中,它有了一個(gè)身體屬性body,并有了一個(gè)say方法,看起來(lái)是一個(gè)“卵細(xì)胞”。在第二次生命過(guò)程中,它又長(zhǎng)出了“尾巴”和“腮”,有了tail和gill屬性,顯然它是一個(gè)“蝌蚪”。在第三次生命過(guò)程中,它的tail和gill屬性消失了,但又長(zhǎng)出了“四條腿”和“肺”,有了legs和lung屬性,從而最終變成了“青蛙”。如果,你的想像力豐富的話,或許還能讓它變成英俊的“王子”,娶個(gè)美麗的“公主”什么的。不過(guò),在看完這段程序之后,請(qǐng)你思考一個(gè)問(wèn)題:
我們一定需要類(lèi)嗎?
還記得兒時(shí)那個(gè)“小蝌蚪找媽媽”的童話嗎?也許就在昨天晚,你的孩子剛好是在這個(gè)美麗的童話中進(jìn)入夢(mèng)鄉(xiāng)的吧。可愛(ài)的小蝌蚪也就是在其自身類(lèi)型不斷演化過(guò)程中,逐漸變成了和媽媽一樣的“類(lèi)”,從而找到了自己的媽媽。這個(gè)童話故事中蘊(yùn)含的編程哲理就是:對(duì)象的“類(lèi)”是從無(wú)到有,又不斷演化,最終又消失于無(wú)形之中的...
“類(lèi)”,的確可以幫助我們理解復(fù)雜的現(xiàn)實(shí)世界,這紛亂的現(xiàn)實(shí)世界也的確需要進(jìn)行分類(lèi)。但如果我們的思想被“類(lèi)”束縛住了,“類(lèi)”也就變成了“累”。想象一下,如果一個(gè)生命對(duì)象開(kāi)始的時(shí)就被規(guī)定了固定的“類(lèi)”,那么它還能演化嗎?蝌蚪還能變成青蛙嗎?還可以給孩子們講小蝌蚪找媽媽的故事嗎?
所以,JavaScript中沒(méi)有“類(lèi)”,類(lèi)已化于無(wú)形,與對(duì)象融為一體。正是由于放下了“類(lèi)”這個(gè)概念,JavaScript的對(duì)象才有了其他編程語(yǔ)言所沒(méi)有的活力。
如果,此時(shí)你的內(nèi)心深處開(kāi)始有所感悟,那么你已經(jīng)逐漸開(kāi)始理解JavaScript的禪機(jī)了。
函數(shù)的魔力
接下來(lái),我們?cè)儆懻撘幌?a href=/itjie/Javajishu/ target=_blank class=infotextkey>JavaScript函數(shù)的魔力吧。
JavaScript的代碼就只有function一種形式,function就是函數(shù)的類(lèi)型。也許其他編程語(yǔ)言還有procedure或 method等代碼概念,但在JavaScript里只有function一種形式。當(dāng)我們寫(xiě)下一個(gè)函數(shù)的時(shí)候,只不過(guò)是建立了一個(gè)function類(lèi)型的實(shí)體而已。請(qǐng)看下面的程序:
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
這個(gè)代碼運(yùn)行之后可以看到typeof(myfunc)返回的是function。以上的函數(shù)寫(xiě)法我們稱(chēng)之為“定義式”的,如果我們將其改寫(xiě)成下面的“變量式”的,就更容易理解了:
[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
這里明確定義了一個(gè)變量myfunc,它的初始值被賦予了一個(gè)function的實(shí)體。因此,typeof(myfunc)返回的也是function。其實(shí),這兩種函數(shù)的寫(xiě)法是等價(jià)的,除了一點(diǎn)細(xì)微差別,其內(nèi)部實(shí)現(xiàn)完全相同。也就是說(shuō),我們寫(xiě)的這些JavaScript函數(shù)只是一個(gè)命了名的變量而已,其變量類(lèi)型即為function,變量的值就是我們編寫(xiě)的函數(shù)代碼體。
聰明的你或許立即會(huì)進(jìn)一步的追問(wèn):既然函數(shù)只是變量,那么變量就可以被隨意賦值并用到任意地方 主站蜘蛛池模板: 45分钟做受片免费观看 | 久久性综合亚洲精品电影网 | 亚洲精品免费视频 | 免费女人光着全身网站 | 久久久久毛片免费观看 | 天天综合网网欲色 | 国产亚洲制服免视频 | 亚洲成色爱我久久 | 中国xxxxx | 姑娘日本大全免费观看版中文翻译 | 無码一区中文字幕少妇熟女网站 | 强奷乱码中文字幕熟女免费 | adc年龄确认大驾光临入口 | 免费无码一区二区三区蜜桃大 | 色噜噜狠狠色综合欧洲 | 美女拉开腿让男生桶到爽 | 女神被调教成了精盆 | 国产精品国产三级国产专区53 | 久久99久久成人免费播放 | 夜里18款禁用的免费B站动漫 | 尤蜜网站在线进入免费 | 公和熄洗澡三级中文字幕 | 最近中文字幕在线中文视频 | 丰满艳妇亲伦 | 女人色极品影院 | 好大的太粗好深BL | 蜜桃传媒一区二区亚洲AV | 欧美一道本一区二区三区 | 亚洲欧美成人在线 | 99久久国产露脸精品竹菊传煤 | 99视频精品在线 | 国产成人免费高清激情视频 | 软糯白嫩双性受h | 忘忧草在线影院www日本 | 看电影来5566一区.二区 | 欧美黑人巨大videos免费 | poronovideos动物狗猪| 狠狠躁天天躁小说 | 亚洲一区日韩一区欧美一区a | 久久天天躁狠狠躁夜夜躁 | 99人精品福利在线观看 |