JS當中的兩種繼承方式簡單介紹和區別

2021-09-25 08:43:45 字數 1807 閱讀 9096

js裡常用的兩種繼承方式:

原型鏈繼承(物件間的繼承)和類式繼承(建構函式間的繼承)

原型鏈繼承:

//要繼承的物件

var parent=

}//新物件

var child = proinherit(parent);

//測試

alert(child.name); //"baba"

child.say(); //"i am baba"

利用另乙個方法proinherit(obj)傳入物件,需要自己定義

function proinherit(obj)

f.prototype = obj;

return new f();

}

//父類建構函式

function parent()

//父類原型方法

parent.prototype.getname = function ()

//子類建構函式

function child()

//類式繼承

classinherit(parent, child);

//例項

var child = new child();

alert(child.getname()) //「baba」

繼承方法:classinherit(parent,child)

var classinherit = function () 

return function (p, c)

}

首先建立乙個空的建構函式f(),用其實例的_proto_屬性來構建父類與子類的原型鏈。起到乙個**的作用,目的是為了防止c.prototype = p.prototype,這樣會在子類例項化後修改屬性或方法時候,連同父類一起修改。整體採用即時函式並且在閉包中儲存f(),防止多次繼承時候建立大量的空的建構函式,從而減少消耗記憶體。最後一行的意思是,由於原型鏈的關係,c的例項物件的constructor會指向p,所以重新設定。

方式雖然在例項的時候繼承了原型方法,但是父類的屬性無法繼承,下面介紹一種複製繼承,算是對類式繼承的補充。

//複製繼承

function copyinherit(p, c) ;

for (i in p) ;

c[i] = copy(p[i], c[i]);

}else }}

return c;

}//重寫parent

function parent() ;

this.arr= [1, 2]

}//例項

var child = new child();

var parent = new parent();

copyinherit(parent, child);

alert(child.name) //"baba"

alert(child.arr) //1,2

alert(child.obj.a) //1

當乙個值賦予乙個變數時候,分為傳值和傳引用兩種方式,當你父物件內屬性包含陣列型別或是物件型別時候, c[i] = tostr.call(p[i]) == astr ? : {};這一句會避免修改子物件屬性而引起的父物件屬性被篡改。

總結:

類式繼承比較普遍,因為大家都比較熟悉這種建構函式方式,但是記憶體占用比較大。而原型式繼承,占用記憶體比較小,但是包含陣列,或者物件型別的轉殖比較麻煩。複製繼承簡單,而且應用廣泛。

js兩種取值方式

使用document.getelementbyid 可以取到頁面上乙個有id的元素 然後訪問這個元素的屬性,比如value 當乙個元素有value屬性的時候,其value才會有值 例1這樣乙個元素,當你使用document.getelementbyid txt1 value時,可以得到其value值...

Js的兩種post方式

第一種提交post的方式是傳統方式,判斷瀏覽器進行post請求。var xmlobj 定義xmlhttprequest物件 如果當前瀏覽器支援xmlhttp request,則建立xmlhttprequest物件 function submitarticle act,cityname,antique...

頁面載入JS兩種方式

第一種 window.onload function 第二種 document ready function 或簡寫 function 區別 1.執行時間 window.onload必須等到頁面內包括的所有元素載入完畢後才能執行。document ready 是dom結構繪製完畢後就執行,不必等到載...