標籤: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) 繼承與原型鏈