最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript prototype的深度探索不是原型繼承那么簡單第3/3頁

 更新時(shí)間:2008年06月02日 19:16:04   作者:  
JavaScript中對(duì)象的prototype屬性,可以返回對(duì)象類型原型的引用。這是一個(gè)相當(dāng)拗口的解釋,要理解它,先要正確理解對(duì)象類型(Type)以及原型(prototype)的概念。

注意,以上的例子說明了用prototype可以快速創(chuàng)建對(duì)象的多個(gè)副本,一般情況下,利用prototype來大量的創(chuàng)建復(fù)雜對(duì)象,要比用其他任何方法來copy對(duì)象快得多。注意到,用一個(gè)對(duì)象為原型,來創(chuàng)建大量的新對(duì)象,這正是prototype pattern的本質(zhì)。
下面是一個(gè)例子:

除了上面所說的這些使用技巧之外,prototype因?yàn)樗?dú)特的特性,還有其它一些用途,被用作最廣泛和最廣為人知的可能是用它來模擬繼承,關(guān)于這一點(diǎn),留待下一節(jié)中去討論。

3 prototype的實(shí)質(zhì)

        上面已經(jīng)說了prototype的作用,現(xiàn)在我們來透過規(guī)律揭示prototype的實(shí)質(zhì)。
        我們說,prototype的行為類似于C++中的靜態(tài)域,將一個(gè)屬性添加為prototype的屬性,這個(gè)屬性將被該類型創(chuàng)建的所有實(shí)例所共享,但是這種共享是只讀的。在任何一個(gè)實(shí)例中只能夠用自己的同名屬性覆蓋這個(gè)屬性,而不能夠改變它。換句話說,對(duì)象在讀取某個(gè)屬性時(shí),總是先檢查自身域的屬性表,如果有這個(gè)屬性,則會(huì)返回這個(gè)屬性,否則就去讀取prototype域,返回protoype域上的屬性。另外,JavaScript允許protoype域引用任何類型的對(duì)象,因此,如果對(duì)protoype域的讀取依然沒有找到這個(gè)屬性,則JavaScript將遞歸地查找prototype域所指向?qū)ο蟮膒rototype域,直到這個(gè)對(duì)象的prototype域?yàn)樗旧砘蛘叱霈F(xiàn)循環(huán)為止,我們可以用下面的圖來描述prototype與對(duì)象實(shí)例之間的關(guān)系:
        //TODO:

4 prototype的價(jià)值與局限性

        從上面的分析我們理解了prototype,通過它能夠以一個(gè)對(duì)象為原型,安全地創(chuàng)建大量的實(shí)例,這就是prototype的真正含義,也是它的價(jià)值所在。后面我們會(huì)看到,利用prototype的這個(gè)特性,可以用來模擬對(duì)象的繼承,但是要知道,prototype用來模擬繼承盡管也是它的一個(gè)重要價(jià)值,但是絕對(duì)不是它的核心,換句話說,JavaScript之所以支持prototype,絕對(duì)不是僅僅用來實(shí)現(xiàn)它的對(duì)象繼承,即使沒有了prototype繼承,JavaScript的prototype機(jī)制依然是非常有用的。
        由于prototype僅僅是以對(duì)象為原型給類型構(gòu)建副本,因此它也具有很大的局限性。首先,它在類型的prototype域上并不是表現(xiàn)為一種值拷貝,而是一種引用拷貝,這帶來了“副作用”。改變某個(gè)原型上引用類型的屬性的屬性值(又是一個(gè)相當(dāng)拗口的解釋:P),將會(huì)徹底影響到這個(gè)類型創(chuàng)建的每一個(gè)實(shí)例。有的時(shí)候這正是我們需要的(比如某一類所有對(duì)象的改變默認(rèn)值),但有的時(shí)候這也是我們所不希望的(比如在類繼承的時(shí)候),下面給出了一個(gè)例子:

相關(guān)文章

最新評(píng)論

油尖旺区| 双峰县| 河津市| 靖安县| 新乐市| 宁晋县| 屯门区| 通许县| 莲花县| 广宗县| 从江县| 隆德县| 徐水县| 大竹县| 漯河市| 宁武县| 合水县| 万年县| 阿尔山市| 临泉县| 库尔勒市| 屯昌县| 明水县| 大港区| 德阳市| 剑河县| 张北县| 罗平县| 广西| 焦作市| 康定县| 罗甸县| 遵义市| 万年县| 林西县| 万山特区| 兴义市| 屯门区| 桦川县| 浦江县| 通渭县|