原型鏈與繼承(五)複製實現繼承

2021-08-20 00:16:17 字數 1500 閱讀 6925

通過複製物件的方式也是實現繼承的一種方式,在jquery和其他的庫中都能看到這種實現。下面簡單講下原理,具體的完整實現可參考jquery原始碼

一、淺拷貝:

function extend(parent,child);

for (var prop in parent)

}var person =

}var student =

extend(person,student);

student.name//allen

student.address//

student.address.home = 'new home address';

student.address.home//new home address

person.address.home//new home address

注意上面的person.address.home也變成了 "new home address",原因在於在拷貝的時候,由於person.address是乙個物件,因此在child在複製的時候僅僅是儲存了乙個引用,而不是將address物件複製過來,這就是淺拷貝的乙個缺點。

二、深拷貝:

1、for在陣列之中的運用,新建 arr = [1, 2, 3],由下面可以得知,for迴圈之中的p,實際上是陣列的序列號。

2、typeof的使用,對於陣列和物件返回的都是object,區別物件和陣列的話有幾種方法:

(1)object.prototype.tostring.call(arg) ==="[object array]"//"[object object]"

(2)array.isarray(arg)//es5

(3)typeof arg === "object" && arg instanceof array

(4)typeof arg === "object" && arg.constructor === array

簡單的實現:

function extenddeeply(parent,child);

for (var prop in parent);

extenddeeply(parent[prop],child[prop]);

}else

}}var person =

}var student =

extenddeeply(person,student);

student.name//allen

student.address//

student.address.home = 'new home address';

student.address.home//new home address

person.address.home//home address

可以看到extenddeep操作之後,修改student中的address屬性不會為person帶來影響。

原型 原型鏈與繼承

面試中經常考到物件導向的一些知識,在這記錄一下,如有不對歡迎指正,願在前端的道路上共勉!一 原型 1.什麼是原型 簡單說就像css的class一樣,是公用的,給dom元素加個class名就可以公用樣式,那麼原型就相當於css裡面的class,都可以用。在建構函式建立出來的時候,系統會預設的幫建構函式...

原型鏈與繼承

一 原型鏈 基本思想 讓乙個引用型別繼承另乙個引用型別的屬性和方法。建構函式 原型 例項的關係 每個建構函式都有乙個原型物件,原型物件都包含乙個指向建構函式的指標,而例項都包含乙個指向原型物件內部的指標。原型鏈繼承例項 function supertype this.property true su...

原型 原型鏈 繼承

原型 是function物件的乙個屬性,它定義了建構函式 製造出的物件 的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件 這定義有點模糊,用 解釋一下 我們在控制台中列印出了這個,首先son物件的建構函式是foo,但是我們的foo中什麼屬性都沒有,怎麼會出現乙個 pro...