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

關于JavaScript中原型繼承中的一點思考

 更新時間:2012年07月25日 11:48:59   作者:  
JS中原型的概念不想多說,這里只是探討一下修改父類原型屬性與覆蓋父類原型中屬性的區(qū)別,防止以后出問題
我們先看一段傳統(tǒng)的繼承代碼:
復制代碼 代碼如下:

//定義超類
function Father(){
this.name = "父親";
}
Father.prototype.theSuperValue = ["NO1","NO2"];
//定義子類
function Child(){
}
//實現繼承
Child.prototype = new Father();
//修改共享數組
Child.prototype.theSuperValue.push("修改");
//創(chuàng)建子類實例
var theChild = new Child();
console.log(theChild.theSuperValue); //["NO1","NO2","修改"]
//創(chuàng)建父類實例
var theFather = new Father();
console.log(theFather.theSuperValue); //["NO1","NO2","修改"]

通過上面的代碼,我們注意“加紅”的代碼,子類Child的原型對象是父類Father的一個實例(new Father()),我們在這里是調用new Father()對象中的theSuperValue屬性,因為new Father()對象中沒有此屬性(只有name屬性),因此會沿著原型鏈向它的原型對象(Father.prototype)中去找,找到后發(fā)現是一個數組,而且是引用類型,此時我們往此數組中添加一個字符串“修改”。

  之后,我們新建了Child的實例對象theChild,當theChild調用theSuperValue屬性時,首先它自己里面沒有此屬性,就會去它的原型對象(new Father)中去找,可惜這里也沒有,接著會到new Father()的原型中去找,OK,在Father.prototype中找到了這個數組,發(fā)現是["NO1","NO2","修改"]。

  再接著,我們創(chuàng)建了Father的實例對象theFather,同上,我們在Father.prototype中找到了這個引用類型的數組["NO1","NO2","修改"]。(當然,數組都是引用類型的?。?

  通過上面的贅述,本來已經理解原型鏈概念的朋友覺得是廢話連篇,其實我也是呵呵,接下來我們再看一個相似的例子:
復制代碼 代碼如下:

//定義超類
function Father() {
this.name = "父親";
}
Father.prototype.theSuperValue = ["NO1", "NO2"];
//定義子類
function Child() {
}
//實現繼承
Child.prototype = new Father();
//修改共享數組
Child.prototype.theSuperValue = ["我是覆蓋代碼"]
//創(chuàng)建子類實例
var theChild = new Child();
console.log(theChild.theSuperValue);
//創(chuàng)建父類實例
var theFather = new Father();
console.log(theFather.theSuperValue);

我們看一下上面的代碼,我用一種比較特別的紫色標注了此段代碼與上段代碼的小小區(qū)別,但結果卻發(fā)生了“巨大”變化,見下面的截圖:

  為什么我說是巨大變化,是因為我們從“重用公共屬性”過渡到“覆蓋公共屬性,建立自己特色屬性”上來!我這里是用數組演示的,其實第二種情況常常用在Function中,用子類的方法來覆蓋父類的方法。

在第二段代碼中,我們需要關注的是紫色代碼前的“=”號,它是賦值操作符。如果我們對Child.prototype及new Father()對象調用這個賦值操作符時,我們就在這個對象上“新建”了一個屬性,當在下面的theChild實例上調用theSuperValue時,返回的當然是新屬性值["我是覆蓋代碼"]。

  但當我們新創(chuàng)建一個父類實例theFather對象時,調用該對象上的theSuperValue屬性,我們就會發(fā)現對象上并沒有啊,這是為什么呢?因為我們剛才覆蓋的是Father對象new Father();而不是Father類,所以,通過Fater()構造函數創(chuàng)建的新對象theFather并不包含新建的屬性,當然,接下來的事情大家都明白,就是沿著原型鏈向上找,OK,在Father.prototype中找到了,就是我們一開始定義的那個數組。

  通過上面兩個例子,我們在JS中使用原型提供的繼承功能時,尤其是利用子對象操作原型方法、對象時,切記“=”號賦值與引用調用這兩種不同的操作,因為他們會帶來完全不同的結果。

相關文章

  • JS顯示日歷和天氣的方法

    JS顯示日歷和天氣的方法

    這篇文章主要介紹了JS顯示日歷和天氣的方法,涉及JavaScript日期與時間的操作技巧,非常簡單實用,需要的朋友可以參考下
    2016-03-03
  • JS小知識之如何將CSV轉換為JSON字符串

    JS小知識之如何將CSV轉換為JSON字符串

    CSV文件一般是以逗號為分隔值的文件(Comma-Separated?Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本),下面這篇文章主要給大家介紹了JS小知識之如何將CSV轉換為JSON字符串的相關資料,需要的朋友可以參考下
    2023-06-06
  • JavaWeb表單及時驗證功能在輸入后立即驗證(含用戶類型,性別,愛好...的驗證)

    JavaWeb表單及時驗證功能在輸入后立即驗證(含用戶類型,性別,愛好...的驗證)

    最近做項目遇到表單在輸入后立即驗證,而不是提交后再驗證,在網上找了下資料,沒有合適的,于是我自己動手寫了一個,分享到腳本之家平臺,供大家參考
    2017-06-06
  • 詳談js對url進行編碼和解碼(三種方式的區(qū)別)

    詳談js對url進行編碼和解碼(三種方式的區(qū)別)

    下面小編就為大家?guī)硪黄斦刯s對url進行編碼和解碼(三種方式的區(qū)別)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • JS 控制小數位數的實現代碼

    JS 控制小數位數的實現代碼

    上網查一查的確存在這種Bug,除了位數上控制之外也沒什么也好的方法(希望高手能提出其它思路)。
    2011-08-08
  • 詳解用webpack把我們的業(yè)務模塊分開打包的方法

    詳解用webpack把我們的業(yè)務模塊分開打包的方法

    本篇文章主要介紹了用webpack把我們的業(yè)務模塊分開打包的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • js核心基礎之構造函數constructor用法實例分析

    js核心基礎之構造函數constructor用法實例分析

    這篇文章主要介紹了js核心基礎之構造函數constructor用法,結合具體實例形式分析了javascript構造函數constructor概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2019-05-05
  • JS短路原理的應用示例 精簡代碼的途徑

    JS短路原理的應用示例 精簡代碼的途徑

    正如標題所言,js中||和&&的特性幫我們精簡了代碼的同時,也帶來了代碼可讀性的降低。這就需要我們自己來權衡了,下面有個不錯的示例
    2013-12-12
  • Boostrap中柵格布局的實現

    Boostrap中柵格布局的實現

    這篇文章主要為大家詳細解析了Boostrap 柵格布局,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2017-01-01
  • echarts柱狀圖坐標軸內容顯示不全的兩種解決辦法

    echarts柱狀圖坐標軸內容顯示不全的兩種解決辦法

    本文主要介紹了echarts柱狀圖坐標軸內容顯示不全的兩種解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05

最新評論

越西县| 吴桥县| 大石桥市| 临泉县| 壤塘县| 公安县| 修文县| 岱山县| 商水县| 永丰县| 华坪县| 汝州市| 伊金霍洛旗| 伊川县| 绥江县| 共和县| 三明市| 肥城市| 丁青县| 长丰县| 龙口市| 新蔡县| 邳州市| 治县。| 邢台市| 沈阳市| 灯塔市| 靖边县| 侯马市| 乡宁县| 师宗县| 汕尾市| 安徽省| 巫溪县| 治多县| 株洲市| 奉贤区| 雷波县| 永康市| 肇庆市| 南投县|