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

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

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

    Dict.CN 在線詞典, 英語(yǔ)學(xué)習(xí), 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計(jì)

    留言簿(23)

    積分與排名

    優(yōu)秀學(xué)習(xí)網(wǎng)站

    友情連接

    閱讀排行榜

    評(píng)論排行榜

    JavaScript prototype原型對(duì)象

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

    最近折騰MSDP的東西,js的東西灰常之多,之前沒(méi)有很好學(xué),現(xiàn)在來(lái)還賬 :=)

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

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


    一個(gè)對(duì)象的原型,是由創(chuàng)建并初始化該對(duì)象的構(gòu)造函數(shù)定義的。在JavaScript中,所有的函數(shù)都具有prototype屬性,它引用了一個(gè)對(duì)象。雖然 原型對(duì)象在初始化時(shí)是空的,但是你在其中定義的任何屬性都會(huì)被該構(gòu)造函數(shù)創(chuàng)建的所有對(duì)象所繼承。這也是JavaScript繼承的實(shí)現(xiàn)原理。

    在學(xué)習(xí)prototype(原型)的時(shí)候,我們首先要搞明白這樣兩個(gè)規(guī)則:
    1. 使用原型可以大量減少每個(gè)對(duì)象對(duì)內(nèi)存的需求量,因?yàn)閷?duì)象可以繼承許多屬性。
    2. 即使屬性在對(duì)象被創(chuàng)建之后才被添加至原型中,對(duì)象也能夠繼承這些屬性。

    我們需要了解一下,原型里定義的屬性,不是簡(jiǎn)單的被實(shí)例化的對(duì)象復(fù)制過(guò)去的,只是看起來(lái)好像是這些對(duì)象的屬性了,這是很重要的概念。

    看一個(gè)實(shí)例來(lái)理解一下:

                    //創(chuàng)建一個(gè)構(gòu)造函數(shù) “用戶(hù)”
            function User(name)
            {
                this.name = name;
            }
           
            //實(shí)例化一個(gè)用戶(hù)——>老張
            var 老張 = new User('老張');
           
            //彈窗顯示老張的名字
            alert(老張.name);
           
            //定義原型,注意這里對(duì)象“老張”已經(jīng)被實(shí)例化了
            User.prototype.favchannel = 'CCAV';
           
            //彈窗顯示老張最喜歡的電視臺(tái)
            alert(老張.favchannel);

    雖然“老張”這個(gè)對(duì)象已經(jīng)被實(shí)例化出來(lái)了,不過(guò)其仍然會(huì)繼承原型定義的“最喜歡的頻道”這個(gè)屬性

    注意,只有讀屬性的時(shí)候才會(huì)使用prototype,寫(xiě)屬性的時(shí)候是不會(huì)用到prototype的。

    首先我們來(lái)詳細(xì)了解一下,什么時(shí)候會(huì)用到prototype。當(dāng)讀一個(gè)對(duì)象的屬性時(shí),其尋找這個(gè)屬性的順序是怎樣的呢?例如:讀取老張的favchannel屬性:

    第一步:去問(wèn)老張,你有沒(méi)有啥喜歡的頻道啊? 老張如果有的話就是:嗯吶,我喜歡CCAV,如果沒(méi)有就說(shuō)我不知道啊,問(wèn)我老大吧,他說(shuō)我喜歡啥,俺就喜歡啥。

    第二步:?jiǎn)柪蠌埖臉?gòu)造函數(shù)的原型,如果原型內(nèi)定義了,就會(huì)告訴你,我的小弟都喜歡CCAV,除非有的非常有個(gè)性可能喜歡某島國(guó)的小電影頻道。如果原型內(nèi)也沒(méi)定義,就會(huì)告訴你,去找我們經(jīng)理,經(jīng)理知道。

    第三步:去問(wèn)經(jīng)理,即Object的prototype,如果經(jīng)理說(shuō)他們一般都喜歡CCAV,那么就是CCAV,如果經(jīng)理也不知道,那就返回undefined。

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

    那么為啥寫(xiě)屬性的時(shí)候不用prototype呢?舉個(gè)例子你就清楚了

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

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

    如果,寫(xiě)屬性也去改prototype的時(shí)候,那改變其中任何一個(gè)對(duì)象的屬性,比如老李現(xiàn)在得意JAPANTV,如果也去改原型的話,老張也只能得意JAPANTV了。。

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


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

    主站蜘蛛池模板: 国产福利免费观看| 182tv免费视频在线观看| 国产在线jyzzjyzz免费麻豆| 亚洲日韩精品一区二区三区 | 亚洲欧洲久久久精品| 国产精品亚洲天堂| 国产成人在线观看免费网站 | 亚洲三区在线观看无套内射| 九九视频高清视频免费观看| 亚洲午夜无码AV毛片久久| 免费一级做a爰片久久毛片潮| 一级毛片直播亚洲| 中文字幕免费人成乱码中国| 日韩va亚洲va欧洲va国产| 国产精品免费福利久久| 亚洲国产超清无码专区| 丁香花在线观看免费观看| 久久亚洲精品11p| 亚洲欧洲自拍拍偷精品 美利坚 | 在线看免费观看AV深夜影院| 亚洲一区二区观看播放| 国产国产人免费视频成69大陆| 香蕉视频亚洲一级| 亚洲男人的天堂www| 99在线观看免费视频| 亚洲人成网站在线观看播放青青| 91免费精品国自产拍在线不卡| 亚洲妇女熟BBW| 亚洲情侣偷拍精品| 99ee6热久久免费精品6| 亚洲狠狠色丁香婷婷综合| 在线观看亚洲av每日更新| 0588影视手机免费看片| 精品成人一区二区三区免费视频| 伊人久久大香线蕉亚洲 | 成人毛片18女人毛片免费| 日本一区二区在线免费观看| 亚洲福利视频一区| 国产精品黄页在线播放免费| 三上悠亚电影全集免费| 亚洲av成人一区二区三区|