說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實(shí)時(shí)把握輿情動(dòng)態(tài)精準(zhǔn)追溯信息源頭
面向?qū)ο蟮恼Z言有一個(gè)標(biāo)志,即擁有類的概念,抽象實(shí)例對象的公共屬性與方法,基于類可以創(chuàng)建任意多個(gè)實(shí)例對象,一般具有封裝、繼承、多態(tài)的特性!但JS中對象與純面向?qū)ο笳Z言中的對象是不同的,ECMA標(biāo)準(zhǔn)定義JS中對象:無序?qū)傩缘募?,其屬性可以包含基本值、對象或者函?shù)??梢院唵卫斫鉃镴S的對象是一組無序的值,其中的屬性或方法都有一個(gè)名字,根據(jù)這個(gè)名字可以訪問相映射的值(值可以是基本值/對象/方法)
js面向?qū)ο缶幊獭匦抡J(rèn)識(shí)面向?qū)ο?/strong>
為了說明JavaScript是一門徹底的面向?qū)ο蟮恼Z言,首先有必要從面向?qū)ο蟮母拍钪?探討一下面向?qū)ο笾械膸讉€(gè)概念:
一切事物皆對象
對象具有封裝和繼承特性
對象與對象之間使用消息通信,各自存在信息隱藏
以這三點(diǎn)做為依據(jù),C++是半面向?qū)ο蟀朊嫦蜻^程語言,因?yàn)?,雖然他實(shí)現(xiàn)了類的封裝、繼承和多態(tài),但存在非對象性質(zhì)的全局函數(shù)和變量。Java、C#是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。但這里函數(shù)本身是一個(gè)過程,只是依附在某個(gè)類上。
然而,面向?qū)ο髢H僅是一個(gè)概念或者編程思想而已,它不應(yīng)該依賴于某個(gè)語言存在。比如Java采用面向?qū)ο笏枷霕?gòu)造其語言,它實(shí)現(xiàn)了類、繼承、派生、多態(tài)、接口等機(jī)制。但是這些機(jī)制,只是實(shí)現(xiàn)面向?qū)ο缶幊痰囊环N手段,而非必須。換言之,一門語言可以根據(jù)其自身特性選擇合適的方式來實(shí)現(xiàn)面向?qū)ο?。所以,由于大多?shù)程序員首先學(xué)習(xí)或者使用的是類似Java、C++等高級(jí)編譯型語言(Java雖然是半編譯半解釋,但一般做為編譯型來講解),因而先入為主地接受了“類”這個(gè)面向?qū)ο髮?shí)現(xiàn)方式,從而在學(xué)習(xí)腳本語言的時(shí)候,習(xí)慣性地用類式面向?qū)ο笳Z言中的概念來判斷該語言是否是面向?qū)ο笳Z言,或者是否具備面向?qū)ο筇匦浴_@也是阻礙程序員深入學(xué)習(xí)并掌握J(rèn)avaScript的重要原因之一。
實(shí)際上,JavaScript語言是通過一種叫做原型(prototype)的方式來實(shí)現(xiàn)面向?qū)ο缶幊痰?。下面就來討論基于類的(class-based)面向?qū)ο蠛突谠偷?prototype-based)面向?qū)ο筮@兩種方式在構(gòu)造客觀世界的方式上的差別。
基于類的面向?qū)ο蠛突谠偷拿嫦驅(qū)ο蠓绞奖容^
首先,客觀世界中的對象的產(chǎn)生都是其它實(shí)物對象構(gòu)造的結(jié)果,而抽象的“圖紙”是不能產(chǎn)生“汽車”的,也就是說,類是一個(gè)抽象概念而并非實(shí)體,而對象的產(chǎn)生是一個(gè)實(shí)體的產(chǎn)生;
其次,按照一切事物皆對象這個(gè)最基本的面向?qū)ο蟮姆▌t來看,類(class)本身并不是一個(gè)對象,然而原型方式中的構(gòu)造器(constructor)和原型(prototype)本身也是其他對象通過原型方式構(gòu)造出來的對象。
再次,在類式面向?qū)ο笳Z言中,對象的狀態(tài)(state)由對象實(shí)例(instance)所持有,對象的行為方法(method)則由聲明該對象的類所持有,并且只有對象的結(jié)構(gòu)和方法能夠被繼承;而在原型式面向?qū)ο笳Z言中,對象的行為、狀態(tài)都屬于對象本身,并且能夠一起被繼承(參考資源),這也更貼近客觀實(shí)際。
類式面向?qū)ο笳Z言比如Java,為了彌補(bǔ)無法使用面向過程語言中全局函數(shù)和變量的不便,允許在類中聲明靜態(tài)(static)屬性和靜態(tài)方法。而實(shí)際上,客觀世界不存在所謂靜態(tài)概念,因?yàn)橐磺惺挛锝詫ο?!如果大家還想了解更多與之有關(guān)的信息,歡迎關(guān)注我們文軍營銷的官網(wǎng)。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732