欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript原型鏈繼承用法實(shí)例分析

 更新時(shí)間:2015年01月28日 11:16:43   投稿:shichen2014  
這篇文章主要介紹了javascript原型鏈繼承用法,實(shí)例分析了javascript原型鏈繼承中的技巧與相關(guān)注意事項(xiàng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(shí)例分析了javascript原型鏈繼承的用法。分享給大家供大家參考。具體分析如下:

復(fù)制代碼 代碼如下:
function Shape(){ 
 this.name = 'shape'; 
 this.toString = function(){ 
  return this.name; 
 } 

 
function TwoDShape(){ 
 this.name = '2D shape'; 

function Triangle(side,height){ 
 this.name = 'Triangle'; 
 this.side = side; 
 this.height = height; 
 this.getArea = function(){ 
  return this.side*this.height/2; 
 }; 

 
/* inheritance */ 
TwoDShape.prototype = new Shape(); 
Triangle.prototype = new TwoDShape();
 

當(dāng)我們對(duì)對(duì)象的prototype屬性進(jìn)行完全重寫時(shí),有時(shí)候會(huì)對(duì)對(duì)象constructor屬性產(chǎn)生一定的負(fù)面影響。
所以,在我們完成相關(guān)的繼承關(guān)系設(shè)定后,對(duì)這些對(duì)象的const屬性進(jìn)行相應(yīng)的重置是一個(gè)非常好的習(xí)慣。如下所示:

復(fù)制代碼 代碼如下:
TwoDShape.prototype.constructor = TwoDShape; 
Triangle.prototype.constructor = Triangle;

改寫:

復(fù)制代碼 代碼如下:
function Shape(){} 
 
Shape.prototype.name = 'shape'; 
Shape.prototype.toString = function(){ 
 return this.name; 

 
function TwoDShape(){} 
 
TwoDShape.prototype = new Shape(); 
TwoDShape.prototype.constructor = TwoDShape; 
 
TwoDShape.prototype.name = '2d shape'; 
 
function Triangle(side,height){ 
 this.side = side; 
 this.height = height; 

 
Triangle.prototype = new TwoDShape; 
Triangle.prototype.constructor = Triangle; 
 
Triangle.prototype.name = 'Triangle'; 
Triangle.prototype.getArea = function(){ 
 return this.side*this.height/2; 
}

再改寫(引用傳遞而不是值傳遞):

復(fù)制代碼 代碼如下:
function Shape(){} 
 
Shape.prototype.name = 'shape'; 
Shape.prototype.toString = function(){ 
 return this.name; 

 
function TwoDShape(){} 
 
TwoDShape.prototype = Shape.prototype; 
TwoDShape.prototype.constructor = TwoDShape; 
 
TwoDShape.prototype.name = '2d shape'; 
 
function Triangle(side,height){ 
 this.side = side; 
 this.height = height; 

 
Triangle.prototype = TwoDShape.prototype; 
Triangle.prototype.constructor = Triangle; 
 
Triangle.prototype.name = 'Triangle'; 
Triangle.prototype.getArea = function(){ 
 return this.side*this.height/2; 
}

雖然提高了效率,但是這樣的方法有個(gè)副作用,因?yàn)槭且脗鬟f,而不是值傳遞,所以“父對(duì)象”中的name值受到了影響。
子對(duì)象和父對(duì)象指向的是同一個(gè)對(duì)象。所以一旦子對(duì)象對(duì)其原型進(jìn)行修改,父對(duì)象也會(huì)隨即被改變。

再再改寫(使用臨時(shí)構(gòu)造器):

復(fù)制代碼 代碼如下:
function Shape(){} 
Shape.prototype.name = 'shape'; 
Shape.prototype.toString = function(){ 
 return this.name; 

function TwoDShape(){} 
var F = function(){} 
F.prototype = Shape.prototype; 
TwoDShape.prototype = new F(); 
TwoDShape.prototype.constructor = TwoDShape; 
TwoDShape.prototype.name = '2d shape'; 
function Triangle(side,height){ 
 this.side = side; 
 this.height = height; 

F.prototype = TwoDShape.prototype; 
Triangle.prototype = new F(); 
Triangle.prototype.constructor = Triangle; 
Triangle.prototype.name = 'Triangle'; 
Triangle.prototype.getArea = function(){ 
 return this.side*this.height/2; 
}

雖然提高了效率,但是這樣的方法有個(gè)副作用,因?yàn)槭且脗鬟f,而不是值傳遞,所以“父對(duì)象”中的name值受到了影響。

子對(duì)象和父對(duì)象指向的是同一個(gè)對(duì)象。所以一旦子對(duì)象對(duì)齊原型進(jìn)行修改,父對(duì)象也會(huì)隨即被改變。

希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 全系IE支持Bootstrap的解決方法

    全系IE支持Bootstrap的解決方法

    用了bootstrap模版搭建的網(wǎng)站,在IE7中打不開,在IE8中背景圖片都不顯示,內(nèi)容排列也出現(xiàn)問題,在IE9中表現(xiàn)的最好,在IE11中出現(xiàn)彈出層中的圖片無法顯示,那么這些兼容性怎么去解決
    2015-10-10
  • JavaScript數(shù)組及常見操作方法小結(jié)

    JavaScript數(shù)組及常見操作方法小結(jié)

    這篇文章主要介紹了JavaScript數(shù)組及常見操作方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript數(shù)組的基本獲取、添加、刪除、排序、翻轉(zhuǎn)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • js中如何將多層嵌套的數(shù)組轉(zhuǎn)換為一層數(shù)組

    js中如何將多層嵌套的數(shù)組轉(zhuǎn)換為一層數(shù)組

    這篇文章主要介紹了js中如何將多層嵌套的數(shù)組轉(zhuǎn)換為一層數(shù)組問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 微信小程序?qū)崿F(xiàn)modal彈出框遮罩層組件(可帶文本框)

    微信小程序?qū)崿F(xiàn)modal彈出框遮罩層組件(可帶文本框)

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)崿F(xiàn)modal彈出框遮罩層組件(可帶文本框)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 微信小程序?qū)崿F(xiàn)登錄界面

    微信小程序?qū)崿F(xiàn)登錄界面

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)登錄界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • JS獲取本周周一,周末及獲取任意時(shí)間的周一周末功能示例

    JS獲取本周周一,周末及獲取任意時(shí)間的周一周末功能示例

    這篇文章主要介紹了JS獲取本周周一,周末及獲取任意時(shí)間的周一周末功能,結(jié)合實(shí)例形式分析了js通過擴(kuò)展實(shí)現(xiàn)針對(duì)日期的運(yùn)算相關(guān)技巧,需要的朋友可以參考下
    2017-02-02
  • javascript制作的滑動(dòng)圖片菜單

    javascript制作的滑動(dòng)圖片菜單

    本文給大家分享的是一款javascript制作的很漂亮的js滑動(dòng)導(dǎo)航菜單,鼠標(biāo)經(jīng)過立即快速滑動(dòng)切換顯示。有需要的小火把可以參考下。
    2015-05-05
  • JS圖片預(yù)加載 JS實(shí)現(xiàn)圖片預(yù)加載應(yīng)用

    JS圖片預(yù)加載 JS實(shí)現(xiàn)圖片預(yù)加載應(yīng)用

    由于圖片加載慢,導(dǎo)致用戶體驗(yàn)特別差,本文將介紹一種圖片預(yù)加載技術(shù),需要了解的朋友可以參考下
    2012-12-12
  • js實(shí)現(xiàn)導(dǎo)航欄上下動(dòng)畫效果

    js實(shí)現(xiàn)導(dǎo)航欄上下動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)導(dǎo)航欄上下動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • javascript中的Function.prototye.bind

    javascript中的Function.prototye.bind

    這篇文章主要介紹了javascript中的Function.prototye.bind的相關(guān)資料,需要的朋友可以參考下
    2015-06-06

最新評(píng)論