最近做web項目,接觸了jquery等框架,雖然使用方便,但是還是想學(xué)習(xí)下Javascript,今天分享下最近對js原型繼承的理解,不足之處歡迎指正。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)九江免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。一、構(gòu)造器的原型屬性與原型對象
剛接觸js時通常依樣畫瓢,用函數(shù)new一個實例,也不知道其原因,只聽說js中函數(shù)即對象。原來js中沒有采用Java等語言中的類繼承體系,而是使用原型對象(prototype)實現(xiàn)繼承體系,具體說是利用“構(gòu)造器”實現(xiàn)類的功能。
首先解釋下原型繼承中的兩個重要概念:原型屬性、原型對象(實例)。
就js對象系統(tǒng)而言,創(chuàng)建的每個函數(shù)(構(gòu)造器)都有一個prototype原型屬性,同時,通過構(gòu)造器創(chuàng)建的每個對象實例也包含一個_proto_屬性,prototype和_proto_屬性是一個指針,指向原型對象。普通函數(shù)與構(gòu)造函數(shù)的唯一區(qū)別就是,其原型屬性prototype是不是一個有意義的值。
原型屬性prototype所指向的原型是一個對象實例(Object instance)。具體如下圖所示,若構(gòu)造器Animal()有一個原型對象B,則由該構(gòu)造器創(chuàng)建的實例都必然復(fù)制于B。即:Animal()的實例a1的_proto_屬性也會指向原型對象B。因此,實例a1能夠繼承B的所有屬性、方法和其他性質(zhì)。
圖1 js對象實例化實現(xiàn)
二、空的對象
在javascript中,“空的對象”是整個原型繼承體系的根基,是所有對象的基礎(chǔ)。介紹“空的對象”之前,必須先介紹下“空對象(null)”。
空對象null
null不是“空的對象”,作為javascript中的一個保留字,其含義是:
?。?)屬于對象類型
?。?)對象是空值
作為一個對象類型,可以使用for…in去列舉它,但是作為一個空值,null沒有任何方法和屬性(包括constructor、_proto_等屬性),因此列舉不到任何內(nèi)容。如下例所示:
var num=0; for(var propertyName in null) { num++; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。