面試中經常考到物件導向的一些知識,在這記錄一下,如有不對歡迎指正,願在前端的道路上共勉!
一、原型
1.什麼是原型: 簡單說就像css的class一樣,是公用的,給dom元素加個class名就可以公用樣式,那麼原型就相當於css裡面的class,都可以用。
在建構函式建立出來的時候,系統會預設的幫建構函式建立並關聯乙個神秘的物件,這個物件就是原型,建構函式的每乙個例項都可以訪問原型中的成員(一般我們放方法);
2.原型鏈:(原型鏈這個概念常考哦~) 首先呢,正如上面所說的,當函式被new操作符呼叫時,會建立出乙個物件,並且該物件中會有乙個指向其原型物件的秘密鏈結(乙個非標準屬性:_proto_),這樣新建的物件(例項)就可以呼叫相關原型物件中的成員;(咳咳,正題來了哈)但是,原型物件自身也具有物件固有的普遍特徵(它也是個物件),因此,也包含了指向其原型物件的鏈結,因此嘞,就形成了乙個鏈式結構,稱之為原型鏈;
請原諒我畫畫的技術:
二、繼承
1.那麼什麼又是繼承呢:其實就是乙個物件沒有的成員,但是另乙個物件有,給它拿過用;(在現實世界中這好像叫『借』吧)
2.繼承的過程:(這裡引用blue老師的乙個比喻) 你媳婦他媽跟你要100萬,你沒有咋辦?找你爹,你爹也沒有,咋整?找你爹的爹,但是你爹的爹的爹死了,所以你爺爺說家裡沒有,也就是返回null;(其實寫到這裡我內心是崩潰的)
3.繼承方式:
1//1.混入式繼承,說是混入式有點高大上,其實就是遍歷賦值
2function
person()
56 let obj =};
1213
for( let k in
obj)19}
2021
2223
//2.經典繼承
24 person.prototype =object.create(obj);
2526
//上面的**相當於
27function
create(obj);
29 p.prototype =obj;
30return
newp();
31}
3233
34//
3.借用建構函式,這種方法繼承不過去
35function
person(name,age)
3940 person.prototype.sayhello = function
()43
44function
human(name,age)
4748 let p = new human('jack',18);
49console.log(p);
50 p.sayhello(); //
p.sayhello is not a function
5152
5354
//4.直接替換,會改變obj1的constructor的指向
55 obj1.prototype = obj2.prototype;
原型 原型鏈 繼承
原型 是function物件的乙個屬性,它定義了建構函式 製造出的物件 的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件 這定義有點模糊,用 解釋一下 我們在控制台中列印出了這個,首先son物件的建構函式是foo,但是我們的foo中什麼屬性都沒有,怎麼會出現乙個 pro...
原型 原型鏈 繼承
在 js 中,一切皆物件!下面就讓我們從建立物件開始,逐步學習js中的核心知識 原型,原型鏈,繼承等 1.字面量方式建立物件 var obj var obj1 2.使用 new object 的方式建立物件 var obj2 new object obj2.name 張三 obj2.age 13 o...
原型鏈與繼承
一 原型鏈 基本思想 讓乙個引用型別繼承另乙個引用型別的屬性和方法。建構函式 原型 例項的關係 每個建構函式都有乙個原型物件,原型物件都包含乙個指向建構函式的指標,而例項都包含乙個指向原型物件內部的指標。原型鏈繼承例項 function supertype this.property true su...