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

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

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

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

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

3 prototype的實質

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

4 prototype的價值與局限性

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

相關文章

最新評論

上犹县| 图们市| 佛教| 民乐县| 乃东县| 错那县| 瑞昌市| 怀安县| 双桥区| 望谟县| 盐池县| 依兰县| 黔江区| 汝南县| 托克逊县| 咸丰县| 南宫市| 来凤县| 内黄县| 清镇市| 柘城县| 镇康县| 凤凰县| 苏尼特左旗| 班玛县| 桐乡市| 克拉玛依市| 玉环县| 沙河市| 遵义市| 长乐市| 庐江县| 谷城县| 宜章县| 襄垣县| 剑川县| 闵行区| 雷波县| 阳泉市| 新密市| 乌拉特前旗|