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