填坑-十万个为什么?(24)
簡(jiǎn)介:很多概念不清或忘記,重新構(gòu)建自己的知識(shí)體系。每天問(wèn)自己1~多個(gè)問(wèn)題。我是菜鳥(niǎo) 成為大神之路!
1.Es6 Class通過(guò)extends關(guān)鍵字實(shí)現(xiàn)繼承 Link Class & extends & super
class ColorPoint extends Point {constructor(x, y, color) {super(x, y); // 調(diào)用父類(lèi)的constructor(x, y)this.color = color;}toString() {return this.color + ' ' + super.toString(); // 調(diào)用父類(lèi)的toString()} } 復(fù)制代碼①上面代碼中,constructor方法和toString方法之中,都出現(xiàn)了super關(guān)鍵字,它在這里表示父類(lèi)的構(gòu)造函數(shù),用來(lái)新建父類(lèi)的this對(duì)象。
②子類(lèi)必須在constructor方法中調(diào)用super方法,否則新建實(shí)例時(shí)會(huì)報(bào)錯(cuò)。這是因?yàn)樽宇?lèi)自己的this對(duì)象,必須先通過(guò)父類(lèi)的構(gòu)造函數(shù)完成塑造,得到與父類(lèi)同樣的實(shí)例屬性和方法,然后再對(duì)其進(jìn)行加工,加上子類(lèi)自己的實(shí)例屬性和方法。如果不調(diào)用super方法,子類(lèi)就得不到this對(duì)象。
③在子類(lèi)的構(gòu)造函數(shù)中,只有調(diào)用super之后,才可以使用this關(guān)鍵字,否則會(huì)報(bào)錯(cuò)。這是因?yàn)樽宇?lèi)實(shí)例的構(gòu)建,基于父類(lèi)實(shí)例,只有super方法才能調(diào)用父類(lèi)實(shí)例。
④父類(lèi)的靜態(tài)方法,也會(huì)被子類(lèi)繼承
2.基于Mixin模式實(shí)現(xiàn)多繼承 Link Mixin
Mixin 指的是多個(gè)對(duì)象合成一個(gè)新的對(duì)象,新對(duì)象具有各個(gè)組成成員的接口
將多個(gè)類(lèi)的接口“混入”(mix in)另一個(gè)類(lèi)
function mix(...mixins) {class Mix {}for (let mixin of mixins) {copyProperties(Mix.prototype, mixin); // 拷貝實(shí)例屬性copyProperties(Mix.prototype, Reflect.getPrototypeOf(mixin)); // 拷貝原型屬性}return Mix; }function copyProperties(target, source) {for (let key of Reflect.ownKeys(source)) { //Reflect.ownKeys()方法返回一個(gè)由目標(biāo)對(duì)象自身的屬性鍵組成的數(shù)組if ( key !== "constructor"&& key !== "prototype"&& key !== "name") {let desc = Object.getOwnPropertyDescriptor(source, key);//方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符。(自有屬性指的是直接賦予該對(duì)象的屬性,不需要從原型鏈上進(jìn)行查找的屬性)Object.defineProperty(target, key, desc);//方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性, 并返回這個(gè)對(duì)象。}} } 復(fù)制代碼轉(zhuǎn)載于:https://juejin.im/post/5c3bdaad6fb9a049a57122f4
總結(jié)
以上是生活随笔為你收集整理的填坑-十万个为什么?(24)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: React官方文档学习笔记(二)
- 下一篇: 并发 --- 31 进程锁 守护进程 进