通過複製物件的方式也是實現繼承的一種方式,在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...