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

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

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

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

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

3 prototype的實質(zhì)

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

4 prototype的價值與局限性

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

相關(guān)文章

  • 一個加載js文件的小腳本

    一個加載js文件的小腳本

    一個加載js文件的小腳本...
    2007-06-06
  • ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解

    ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解

    這篇文章主要介紹了ES6解構(gòu)賦值(數(shù)組,對象,函數(shù))使用詳解,JavaScript 中最常用的兩種數(shù)據(jù)結(jié)構(gòu)是 Object 和 Array,解構(gòu)操作對那些具有很多參數(shù)和默認(rèn)值等的函數(shù)也很奏效,本文通過實例代碼詳細(xì)講解需要的朋友可以參考下
    2022-11-11
  • 如何使用原生Js實現(xiàn)隨機點名詳解

    如何使用原生Js實現(xiàn)隨機點名詳解

    這篇文章主要給大家介紹了關(guān)于如何使用原生Js實現(xiàn)隨機點名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 微信小程序自定義底部彈出框動畫

    微信小程序自定義底部彈出框動畫

    這篇文章主要為大家詳細(xì)介紹了微信小程序自定義底部彈出框動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • javascript之通用簡單的table選項卡實現(xiàn)(二)

    javascript之通用簡單的table選項卡實現(xiàn)(二)

    上篇中的選項卡存在這樣的問題:把邏輯封裝在table.js中,不夠靈活,也就是說如果某個選項卡是實現(xiàn)異步請求或者跳轉(zhuǎn),而非div的顯隱切換,那么就得修過table.js來達(dá)到目的,顯然不是我所需要的。
    2010-05-05
  • javascript計算星座屬相(十二生肖屬相)示例代碼

    javascript計算星座屬相(十二生肖屬相)示例代碼

    本文介紹了使用javascript計算星座和屬相的示例,這個可以用在用戶注冊的時候顯示出來,大家參考使用吧
    2014-01-01
  • JavaScript實現(xiàn)顯示隱藏表單文字

    JavaScript實現(xiàn)顯示隱藏表單文字

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)顯示隱藏表單文字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • webpack打包js文件及部署的實現(xiàn)方法

    webpack打包js文件及部署的實現(xiàn)方法

    這篇文章主要介紹了webpack打包js文件的方法及webpack打包后的JS文件如何部署,需要的朋友可以參考下
    2017-12-12
  • 基于JavaScript實現(xiàn)瀑布流效果(循環(huán)漸近)

    基于JavaScript實現(xiàn)瀑布流效果(循環(huán)漸近)

    本文給大家介紹基于javascript實現(xiàn)循環(huán)漸近瀑布流效果,代碼簡單易懂,非常具有參考價值,需要的朋友參考下吧
    2016-01-01
  • IE及IE6瀏覽器中判斷JS文件加載成功失敗的方法

    IE及IE6瀏覽器中判斷JS文件加載成功失敗的方法

    這篇文章主要介紹了IE及IE6瀏覽器中判斷JS文件加載成功失敗的方法,本文使用vbscript來解決這個問題,需要的朋友可以參考下
    2015-02-02

最新評論

金湖县| 郎溪县| 安阳市| 罗江县| 柘荣县| 乌兰浩特市| 内乡县| 古浪县| 合水县| 崇左市| 杨浦区| 黄浦区| 揭东县| 博罗县| 梧州市| 潞西市| 乌鲁木齐县| 自贡市| 图片| 南投县| 宣武区| 顺义区| 宁津县| 连云港市| 集贤县| 农安县| 渭南市| 贡觉县| 通州市| 临洮县| 浮山县| 荣昌县| 长岛县| 西安市| 朝阳市| 浦县| 工布江达县| 邛崃市| 石棉县| 榆社县| 龙岩市|