<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    JavaScript prototype原型對象

    原文 http://www.xiaoxiaozi.com/2009/06/29/995/

    最近折騰MSDP的東西,js的東西灰常之多,之前沒有很好學,現在來還賬 :=)

    在之前的《javascript 構造函數和方法》一文中,我們知道,用構造函數把方法賦予其實例化的對象這樣的效率實在讓人不敢恭維。如果那樣的話,構造函數創建的每一個每一個對象都會有相同的方法屬性的副本。

    在JavaScript中,有一種更為有效的聲明方法、常量及其他能被類所有對象共享的屬性的方式,那就是prototype原型


    一個對象的原型,是由創建并初始化該對象的構造函數定義的。在JavaScript中,所有的函數都具有prototype屬性,它引用了一個對象。雖然 原型對象在初始化時是空的,但是你在其中定義的任何屬性都會被該構造函數創建的所有對象所繼承。這也是JavaScript繼承的實現原理。

    在學習prototype(原型)的時候,我們首先要搞明白這樣兩個規則:
    1. 使用原型可以大量減少每個對象對內存的需求量,因為對象可以繼承許多屬性。
    2. 即使屬性在對象被創建之后才被添加至原型中,對象也能夠繼承這些屬性。

    我們需要了解一下,原型里定義的屬性,不是簡單的被實例化的對象復制過去的,只是看起來好像是這些對象的屬性了,這是很重要的概念。

    看一個實例來理解一下:

                    //創建一個構造函數 “用戶”
            function User(name)
            {
                this.name = name;
            }
           
            //實例化一個用戶——>老張
            var 老張 = new User('老張');
           
            //彈窗顯示老張的名字
            alert(老張.name);
           
            //定義原型,注意這里對象“老張”已經被實例化了
            User.prototype.favchannel = 'CCAV';
           
            //彈窗顯示老張最喜歡的電視臺
            alert(老張.favchannel);

    雖然“老張”這個對象已經被實例化出來了,不過其仍然會繼承原型定義的“最喜歡的頻道”這個屬性

    注意,只有讀屬性的時候才會使用prototype,寫屬性的時候是不會用到prototype的。

    首先我們來詳細了解一下,什么時候會用到prototype。當讀一個對象的屬性時,其尋找這個屬性的順序是怎樣的呢?例如:讀取老張的favchannel屬性:

    第一步:去問老張,你有沒有啥喜歡的頻道啊? 老張如果有的話就是:嗯吶,我喜歡CCAV,如果沒有就說我不知道啊,問我老大吧,他說我喜歡啥,俺就喜歡啥。

    第二步:問老張的構造函數的原型,如果原型內定義了,就會告訴你,我的小弟都喜歡CCAV,除非有的非常有個性可能喜歡某島國的小電影頻道。如果原型內也沒定義,就會告訴你,去找我們經理,經理知道。

    第三步:去問經理,即Object的prototype,如果經理說他們一般都喜歡CCAV,那么就是CCAV,如果經理也不知道,那就返回undefined。

    所以順序是 老張——>User prototype——>Object prototype

    那么為啥寫屬性的時候不用prototype呢?舉個例子你就清楚了

            //老李是一個新的用戶
            var 老李 = new User('老李');
           
            //老李喜歡小電影
            老李.favchannel = 'JAPANTV';
           
            //彈窗顯示JAPANTV
            alert(老李.favchannel);

            //彈窗顯示老張還是中意CCAV
            alert(老張.favchannel);

    如果,寫屬性也去改prototype的時候,那改變其中任何一個對象的屬性,比如老李現在得意JAPANTV,如果也去改原型的話,老張也只能得意JAPANTV了。。

    上面我們已經了解了,屬性的繼承(從原型處繼承)只發生在讀屬性時。另外,原型對象的屬性被一個類的所有對象共享,所以通常只用它們來定義類中所有對象相同的屬性。例如我們可以定義“圓”這個類的PI值為1.34。


    posted on 2011-02-24 10:05 都市淘沙者 閱讀(240) 評論(0)  編輯  收藏 所屬分類: JSP/PHP

    主站蜘蛛池模板: 亚洲中文字幕无码日韩| 亚洲成电影在线观看青青| 免费视频一区二区| 精品日韩99亚洲的在线发布| 四虎永久免费观看| 久久久久久AV无码免费网站下载| 亚洲av乱码一区二区三区香蕉| 亚洲国产成人五月综合网 | 亚洲大片免费观看| 亚洲aⅴ无码专区在线观看春色 | 性色av极品无码专区亚洲| 亚洲日本一区二区三区在线| 美女视频黄免费亚洲| 巨胸狂喷奶水视频www网站免费| 亚洲无线一二三四区| 久久精品亚洲男人的天堂 | 亚洲成人激情在线| 国产又粗又猛又爽又黄的免费视频| 国产成人精品免费久久久久| 国产精品亚洲一区二区三区在线观看| 亚洲欧洲第一a在线观看| 免费在线观看你懂的| 91九色老熟女免费资源站| 国产免费一区二区三区免费视频| 亚洲一区二区三区91| 亚洲AV无码国产精品麻豆天美| 国产a级特黄的片子视频免费 | 久久久久国产亚洲AV麻豆| 久久久久国产精品免费免费搜索| 中文字幕一区二区三区免费视频| 久久精品亚洲日本波多野结衣| 亚洲精品国产免费| 亚洲国产精品无码AAA片| 亚洲?V乱码久久精品蜜桃| 久久电影网午夜鲁丝片免费| 999任你躁在线精品免费不卡| 中文字幕看片在线a免费| 国产亚洲综合一区二区三区| 国产午夜亚洲精品| 亚洲精品免费网站| 亚洲人成网站在线观看播放动漫 |