javascript 高階 基於原型鏈的繼承

2021-06-20 00:59:28 字數 1696 閱讀 9937

function parent()

parent.prototype.parentvalue = function()

function children()

//將children的原型指向parent的乙個例項,完成繼承

children.prototype = new parent();

children.prototype.childrenvalue = function()

var c1 = new children();

var p1 = new parent();

c1.parentvalue();

c1.childrenvalue();

結果:parent

children

這是乙個基於原型鏈的繼承方式,當然很重要的還是它的記憶體模型

當剛剛建立函式的時候,parent和children各自指向自己的原型

此時parent和children沒有任何關係

再下一步,重寫繼承鏈關係,將children的prototype屬性指向parent的乙個例項,這樣parent空間裡面的屬性就會複製到例項中乙份,而例項的_prop_屬性也會指向

原型物件,從擁有其方法,這樣就完成了繼承

當呼叫parentvale()的時候,首先在自己空間裡面尋找parentvalue方法,沒有找到,然後呼叫prototype找到原型的指向,發現原型中

沒有這個方法,但是原型中有_prop_屬性,於是呼叫_prop_的指向找到parent prototype,找到這個方法,然後在方法中呼叫this.parentname的時候

再次尋在,發現在自己空間中沒有,但是在原型的指向中找到了parentname

缺點

function parent(parentname)

function children(childrenname)

children.prototype = new parent("parent"); //僅僅只能在此處來為父類的屬性賦值

//有很大的侷限性

還有乙個問題,如果父類中有引用型別,而在子類中對其進行應用,並賦值的,就會改變其,這樣的方式就像是將屬性仍然定義在原型中一樣

function parent(parentname)

parent.prototype.say = function()

function children(childrenname)

children.prototype = new parent("parent");

var c1 = new children("張三");

var c2 = new children("李四");

c1.arr.push("a");

c1.say();

c2.say();

結果:h,d,a

h,d,a

JavaScript高階 原型

1.什麼是原型 原型是 js 中非常特殊乙個物件,當乙個函式建立之後,會隨之就產生乙個原型物件,當通過這個函式的建構函式建立了乙個具體的物件之後,在這個具體的物件中就會有乙個屬性指向原型。第一種狀態 定義了乙個物件 function person 第二種狀態,這樣賦值就會賦在原型物件中 使用原型來給...

Javascript 高階 封裝

js中處處是物件,物件導向的第一步當然就是封裝了。由於js中沒有類的概念,所以封裝起來也比較麻煩。以下介紹兩種js的封裝。1 使用約定優先的原則,將全部的私有變數以 開頭 看完 是不是有種被坑的感覺。只把全部的變數以 開頭,事實上還是能夠直接訪問的,這能叫封裝麼。當然了。說了是約定優先嘛,這樣的方式...

javascript 高階用法

為什麼 typeof 不靠譜,無法將陣列從物件中區分出來,instanceof 有特殊情況,在iframe存在的情況下無法判斷另乙個iframe內的陣列 如何做 object.prototype.tostring call arr 特點 鏈式的settimeout在有定時器時不會新增到等待佇列而是繼...