js(4) 繼承與原型鏈

來源:互聯網
上載者:User

標籤:cto   實現   屬性   span   san   return   javascrip   black   apply   

一:使用原型鏈來實現繼承

在介紹原型鏈之前,要引入建構函式,原型,和執行個體的關係

建構函式都有一個原型對象,在原型對象中存在一個指向建構函式的指標(constructor),在執行個體中包含一個指向原型對象的內部指標(prototype)

構建原型鏈的原理是讓一個類型的原型對象等於另一個類型的執行個體

當使用new 操作符構造執行個體的時候,執行個體會擁有建構函式原型中的屬性和方法

實現代碼如下:

function  SuperType(){    this.property=true;  }
//在SuperType的原型上定義了getSuperValue方法SuperType.prototype.getSuperValue=function(){ return this.property }function SubType(){ this.subproperty=false;}
//讓SubType.prototype等於SuperType的執行個體SubType.prototype=new SuperType();SubType.prototype.getSubValue=function(){ return this.subproperty;}var instance=new SubType();alert(instance.getSuperValue())

繼承實現的本質是重寫原型對象,代之以一個新類型的執行個體

二:使用建構函式

這種方法的原理是在子類型建構函式的內部調用超類型建構函式,通過call()或者apply()方法

function SuperType(){  this.colors=["red","blue","green"]}
function SubType(){
  SuperType.call(this);
}
var insance1=new SubType();
instance1.colors.push("black");
alert(instancel.colors) //"red blue green black"
var instance2=new Subtype();
alert(instance2.colors)//"red blue green"

使用 call()方法或者 apply()方法,在將來要建立的SubType執行個體的環境下調用了superType()函數

因為對於call()和apply()方法實際上改變了this的值,對於call或者apply有什麼區別呢?

 

js(4) 繼承與原型鏈

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.