JavaScript繼承、對象枚舉-筆記

一、第一種繼承(運用原型鏈)

Grand.prototype.LastName = "姓楊";
function Grand() {
}
var grand=new Grand();

Father.prototype=grand;
function Father() {
var Name="也姓楊、";
document.write(Name);
}
var father=new Father();

Son.prototype=father;
function Son()
{
document.write(this.LastName);
}
var son=new Son();


輸出結果:在son構造中,輸出結果爲:也姓楊、姓楊;

二、第二種繼承(call,apply關鍵字)

function Human(name,sex,age){
this.name=name;
this.sex=sex;
this.age=age;
}
function HumanYang(name,sex,age,address){
Human.call(this,name,sex,age);
this.address=address;
document.write(name,sex,age,address);
}
var human=new HumanYang("楊","男","20","重慶");


輸出結果:楊男20重慶

三、第三種繼承(共有原型、多個構造函數共有一個原型)

father.prototype.lastName="yang";
function father(){
}
function son(){

}
function herinert(Tagert,Object){
Tagert.prototype=Object.prototype;
}
herinert(son,father);
var son=new son();
document.write(son.lastName);


輸出結果:yang;

herinert爲封裝繼承的一個函數,放入函數可實現誰繼承自誰;

第三種模式缺點:在子函數緣原型上加屬性會改變父原型的值

四、第四種繼承(聖盃模式)

father.prototype.lastName="yang";
function father(){
}
function F(){}
f.prototype=father.prototype;
function Son(){
}
Son.prototype=f.prototype;


分析:所謂的聖盃模式就是用一箇中間原型來連接兩個函數;實質形成爲原型鏈;這樣在改動子元素的原型時不會爲父原型加上任何屬性;因爲中間函數沒有任何原型。

繼承封裝方法可以這樣寫:

function inherit(Target,Origin){
function F(){}
F.prototype=Target.prototype;
Origin.prototype=new F()//==Object.prototype=F.prototype
Target.prototype.constuctor=Tragt;
Target.prototype.uber=Origin.prototype;
}

封裝繼承的另外一種寫法,來源於YUI3類庫的一種寫法;

var inherit=(function(){
var F=new function(){};
return function(Target,Origin){
F.prototype=Origin.prototype;
Target.prototype=new F();
Target.prototype.constuctor=Target;
Target.prototype.uber=Origin.prototype;
}
}());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章