摘要:繼承實(shí)現(xiàn)繼承的核心在于使用表明繼承自哪個(gè)父類,并且在子類構(gòu)造函數(shù)中必須調(diào)用,因?yàn)檫@段代碼可以看成。
原型繼承和 Class 繼承 原型如何實(shí)現(xiàn)繼承?Class 如何實(shí)現(xiàn)繼承?Class 本質(zhì)是什么?
首先先來(lái)講下 class,其實(shí)在 JS 中并不存在類,class 只是語(yǔ)法糖,本質(zhì)還是函數(shù)。
那讓我們來(lái)實(shí)現(xiàn)一下繼承
組合繼承組合繼承是最常用的繼承方式,
function Parent(value) { this.val = value } Parent.prototype.getValue = function() { console.log(this.val) } function Child(value) { Parent.call(this, value) } Child.prototype = new Parent() const child = new Child(1) child.getValue() // 1 child instanceof Parent // true
以上繼承的方式核心是在子類的構(gòu)造函數(shù)中通過(guò) Parent.call(this) 繼承父類的屬性,然后改變子類的原型為 new Parent() 來(lái)繼承父類的函數(shù)。
這種繼承方式優(yōu)點(diǎn)在于構(gòu)造函數(shù)可以傳參,不會(huì)與父類引用屬性共享,可以復(fù)用父類的函數(shù),但是也存在一個(gè)缺點(diǎn)就是在繼承父類函數(shù)的時(shí)候調(diào)用了父類構(gòu)造函數(shù),導(dǎo)致子類的原型上多了不需要的父類屬性,存在內(nèi)存上的浪費(fèi)。
function Parent(value) { this.val = value } Parent.prototype.getValue = function() { console.log(this.val) } function Child(value) { Parent.call(this, value) } Child.prototype = Object.create(Parent.prototype, { constructor: { value: Child, enumerable: false, writable: true, configurable: true } }) const child = new Child(1) child.getValue() // 1 child instanceof Parent // true
以上繼承實(shí)現(xiàn)的核心就是將父類的原型賦值給了子類,并且將構(gòu)造函數(shù)設(shè)置為子類,這樣既解決了無(wú)用的父類屬性問(wèn)題,還能正確的找到子類的構(gòu)造函數(shù)。
Class 繼承class Parent { constructor(value) { this.val = value } getValue() { console.log(this.val) } } class Child extends Parent { constructor(value) { super(value) this.val = value } } let child = new Child(1) child.getValue() // 1 child instanceof Parent // true
class 實(shí)現(xiàn)繼承的核心在于使用 extends 表明繼承自哪個(gè)父類,并且在子類構(gòu)造函數(shù)中必須調(diào)用 super,因?yàn)檫@段代碼可以看成 Parent.call(this, value)。
模塊化 為什么要使用模塊化?都有哪幾種方式可以實(shí)現(xiàn)模塊化,各有什么特點(diǎn)?解決命名沖突
提高代碼的可復(fù)用性
提高代碼的可維護(hù)性
立即執(zhí)行函數(shù)以作用域的方式來(lái)解決命名沖突的問(wèn)題
Module// 引入模塊 API import XXX from "./a.js" import { XXX } from "./a.js" // 導(dǎo)出模塊 API export function a() {} export default function() {}Proxy Proxy 可以實(shí)現(xiàn)什么功能?
Proxy 是 ES6 中新增的功能,它可以用來(lái)自定義對(duì)象中的操作。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/102201.html
摘要:使用新特性開發(fā)微信小程序國(guó)際化與本地化新特性國(guó)際化與本地化新增了很多對(duì)于國(guó)際化的支持,比如時(shí)間格式,貨幣格式,數(shù)字格式等。 ECMAScript 6(簡(jiǎn)稱ES6)是JavaScript語(yǔ)言的最新標(biāo)準(zhǔn)。因?yàn)楫?dāng)前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 微信小程序支持絕大部分ES6的新增特性。 使用ES6新特性開發(fā)微信小程序(1) ES6新特性:Cons...
摘要:更新了個(gè)版本,最新正式版是語(yǔ)言的下一代標(biāo)準(zhǔn),早已在年月正式發(fā)布。基本不支持移動(dòng)端瀏覽器對(duì)的支持情況版起便可以支持的新特性。比較通用的工具方案有,,,等。 1、ECMAScript是什么? 和 JavaScript 有著怎樣的關(guān)系? 1996 年 11 月,Netscape 創(chuàng)造了javascript并將其提交給了標(biāo)準(zhǔn)化組織 ECMA,次年,ECMA 發(fā)布 262 號(hào)標(biāo)準(zhǔn)文件(ECMA-...
摘要:但是在中,可以通過(guò)關(guān)鍵字來(lái)實(shí)現(xiàn)類的繼承的使用可以使得繼承意義更加明確并且值得一提的是,如果你使用來(lái)定義的組件,那么可以在類的構(gòu)造器里面,用簡(jiǎn)單的的聲明方式來(lái)替代方法。 原文:The 10 min ES6 course for the beginner React Developer譯者:Jim Xiao 著名的80/20定律可以用來(lái)解釋React和ES6的關(guān)系。因?yàn)镋S6增加了超過(guò)75...
摘要:,正式名稱是,但是這個(gè)名稱更加簡(jiǎn)潔。已經(jīng)不再是最新的標(biāo)準(zhǔn),但是它已經(jīng)廣泛用于編程實(shí)踐中。而制定了模塊功能。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,得到了金山軟件等眾多知名用戶的認(rèn)可。 譯者按: 人生苦短,我用ES6。 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 譯者: Fundebug 為了保...
摘要:今天閑來(lái)無(wú)事,看見幾行小字。又說(shuō)所有對(duì)象,繼承終是。強(qiáng)行押韻一波這首詩(shī)的意思就是說(shuō)的我今天沒(méi)有什么事情,然后無(wú)意中又在網(wǎng)上看到了任何對(duì)象都是從對(duì)象繼承而來(lái)的這句話。一時(shí)興起,便去驗(yàn)證這句話。 今天閑來(lái)無(wú)事,看見幾行小字。又說(shuō)所有對(duì)象,繼承終是Obj。—— 強(qiáng)行押韻一波 這首詩(shī)的意思就是說(shuō)的我今天沒(méi)有什么事情,然后無(wú)意中又在網(wǎng)上看到了任何對(duì)象都是從Object對(duì)象繼承而來(lái)的這句話。一時(shí)興...
閱讀 833·2023-04-25 19:49
閱讀 3769·2021-09-30 09:47
閱讀 2761·2021-09-13 10:21
閱讀 2692·2021-08-24 10:04
閱讀 3177·2019-08-30 15:55
閱讀 2323·2019-08-30 15:55
閱讀 2410·2019-08-30 15:54
閱讀 3479·2019-08-30 13:53