JavaScript ES6中類與模塊化管理超詳細(xì)講解
前言
在學(xué)習(xí)類之前我們先來了解一下面向?qū)ο蠛兔嫦蜻^程
面向?qū)ο螅菏且环N開發(fā)思想,一切皆為對(duì)象。對(duì)象是屬性和行為的結(jié)合體
面向過程:也是一種開發(fā)思想。開發(fā)中的每個(gè)細(xì)節(jié),開發(fā)者都需要考慮到。
面向?qū)ο蟮娜筇匦?/p>
(1)封裝性:對(duì)象是屬性和行為的封裝體——數(shù)據(jù)安全
(2)繼承性:子類可以繼承父類父類的屬性和方法——代碼復(fù)用
(3)多態(tài)性:同一個(gè)消息傳遞給不同對(duì)象,出現(xiàn)的效果不同——應(yīng)用靈活,可以適應(yīng)不同的需求
類
定義:具有相同屬性和行為的集合
ES5中實(shí)現(xiàn)類的方法:構(gòu)造函數(shù),在構(gòu)造函數(shù)中封裝了屬性和方法。缺陷是構(gòu)造函數(shù)和普通函數(shù)的定義方式是一樣的,容易混淆。
ES6中類的定義方式:語義性更強(qiáng)、語法更簡(jiǎn)潔
class 類名{
屬性
行為
}
class是關(guān)鍵字,專門用來定義類
// 用class定義Student類 class Student{ constructor(id,name,sex){ //構(gòu)造函數(shù) id,name,sex是屬性 this.id = id, this.name = name, this.sex = sex } display(){ console.log('學(xué)號(hào)',this.id) console.log('姓名',this.name) console.log('性別',this.sex) } } // 使用Student類創(chuàng)建對(duì)象:創(chuàng)建對(duì)象時(shí),不能顯式的使用constructor 必須用類名創(chuàng)建 默認(rèn)調(diào)用constructor函數(shù) let stu1 = new Student(01,'孫悟空','男'); let stu2 = new Student(02,'白骨精','女'); let stu3 = new Student(03,'紫霞仙子','女'); // 使用對(duì)象 stu1.display(); console.log('---------------') stu2.display(); console.log('---------------') stu3.display();
ES6中支持getter/setter方法來獲取屬性值、設(shè)置屬性值
(1)定義get()方法、set()方法的目的是:用于隱藏對(duì)象的屬性名
(2)在使用get()方法、set()方法時(shí)不用帶'()'
類定義時(shí)需要注意的問題:
(1)類的屬性和函數(shù):類可以由屬性也可以沒有屬性,可以由方法也可以沒有方法
(2)類的屬性是放在構(gòu)造方法中初始化的,若類沒有屬性,可以不顯式定義構(gòu)造方法,此時(shí),系統(tǒng)會(huì)自動(dòng)生成一個(gè)無參的控的構(gòu)造方法
類屬性的setter/getter函數(shù)
1、作用:在面向?qū)ο箝_發(fā)中,對(duì)象是屬性和行為的結(jié)合體(封裝性),不能在對(duì)象的外部直接訪問屬性,若需要訪問對(duì)象的屬性,通過getter/setter方法來進(jìn)行,就相當(dāng)于在對(duì)象的外部屏蔽了對(duì)象的屬性
2、用法:下面代碼定義了Location類 并且使用get set函數(shù)
// 定義類 class Location{ constructor(){ this._row = 0, this._column = 0, this._maxValue = 0 } get row(){ return this._row; } set row(row){ this._row = row; } get column(){ return this._column; } set column(column){ this._column = column; } get maxValue(){ return this._maxValue } set maxValue(max){ this._maxValue = max; } }
類的繼承
1、基本概念
(1)基類(父類):可以派生子類的類
(2)派生類(子類):由父類派生而來的類
2、繼承的實(shí)現(xiàn)
(1)ES5中的繼承實(shí)現(xiàn),沒有類的概念
a、構(gòu)造函數(shù):構(gòu)造函數(shù)就是類名,在ES5中類的繼承實(shí)際就是構(gòu)造函數(shù)的繼承
b、實(shí)現(xiàn):通過call、apply、bind
// 定義構(gòu)造函數(shù):基類 function Father(name){ this.name = name, this.age = 45 this.disp = function(){ console.log('姓名',this.name); console.log('年齡',this.age); } } // 定義構(gòu)造函數(shù): function Son(name){ Father.call(this,name); this.height = '189cm'; this.show = function(){ this.disp(); console.log('身高',this.height); } } let son = new Son('趙四') son.show();
(2)ES6中的繼承實(shí)現(xiàn) extends實(shí)現(xiàn)繼承
a、super:指向父類,super(參數(shù))表示調(diào)用父類的構(gòu)造函數(shù)
b、如果在子類的構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù),那么super()必須作為子類構(gòu)造函數(shù)中的第一條語句(在執(zhí)行子類的構(gòu)造函數(shù)之前,必須先執(zhí)行父類的構(gòu)造函數(shù)(先有父,再有子))
c、方法覆蓋(方法重寫OverWrite):在繼承過程中,若父類的某個(gè)方法與子類的某個(gè)方法同名,則子類方法覆蓋父類的同名方法
d、在子類的方法中可以使用super調(diào)用父類中的某個(gè)方法
e、不允許多繼承,只能單繼承
多繼承:類的直接父類有多個(gè)
單繼承:類的直接父類只有一個(gè)
// 定義父類 class Father{ constructor(name,age){ this.name = name, this.age = age } fun(){ console.log('我是父類中的方法'); } show(){ console.log('姓名',this.name); console.log('年齡',this.age); } } class Mother{ constructor(a,b){ this.a = a, this.b = b } } // 定義子類 繼承Father類 class Son extends Father{ constructor(name,age,height){ super(name,age);//調(diào)用父類的構(gòu)造函數(shù) this.height = height; } hobby(){ console.log('我喜歡羽毛球~'); } show(){ super.show(); console.log('身高',this.height); } } let s1 = new Son('小王同學(xué)',22,'187cm'); s1.hobby(); s1.show(); s1.fun();
繼承的好處
在父類中定義好的屬性和方法,子類繼承后可直接使用
類繼承過程中的向上轉(zhuǎn)型
子類對(duì)象的類型一定是父類的類型,反之父類對(duì)象的類型不能是子類的類型。
注:
(1)typeof:用于判斷變量的數(shù)據(jù)類型(基本數(shù)據(jù)類型)
typeof 變量名 == ‘數(shù)據(jù)類型’
(2)instanceof:用于判斷變量的數(shù)據(jù)類型(類類型)
ES6的模塊化管理
1、Node.js簡(jiǎn)介
(1)Node是什么
a、瀏覽器內(nèi)核有兩個(gè)引擎:渲染引擎(渲染html/css)、JavaScript引擎()運(yùn)行JavaScript代碼
b、Node是獨(dú)立于瀏覽器的JavaScript的運(yùn)行環(huán)境,通常將Node稱為JavaScript的服務(wù)器運(yùn)行環(huán)境
(1)Node相當(dāng)于運(yùn)行JavaScript程序的虛擬機(jī)
(2)是JavaScript的工具庫 Node.js內(nèi)部采用Google公司的V8引擎
(2)使用Node的原因:有了Node后JavaScript就正式成為一個(gè)工程化的語言。
2、安裝Node.js
(1)環(huán)境變量的設(shè)置的目的:在自定義的目錄下運(yùn)行程序時(shí),操作系統(tǒng)可以找到相應(yīng)的指令
3、ES6中的模塊化管理
1、ES6的方式:
(1)一個(gè).js文件就是一個(gè)模塊采用“module”方式管理。即用exports導(dǎo)出,用import...from導(dǎo)入、
文件名:主文件名.擴(kuò)展名
.擴(kuò)展名作用:指定文件類型 例如: .mp3:音頻文件 .mp4:視頻文件 .jpg .png 圖片文件
(2)Node的方式:采用“CommonJS”方式。即export.module=‘變量名’導(dǎo)出,用require導(dǎo)入
2、在VSCode中配置ES6的模塊管理環(huán)境
(1):初始化環(huán)境,在存放js文件的文件夾下執(zhí)行:npm init -y(生成package.json文件)
(2):在package.json文件中加入:"type":module(表示采用的是ES6的模塊化)
(3)導(dǎo)出/導(dǎo)入變量
(4)導(dǎo)入/導(dǎo)出整個(gè)模塊:使用“通配符”,表示導(dǎo)入所有
(5)默認(rèn)導(dǎo)出(export default)
1.一個(gè)模塊只能有一個(gè)默認(rèn)導(dǎo)出,對(duì)于默認(rèn)導(dǎo)出,導(dǎo)入的名稱可以和導(dǎo)出的名稱不一致
2、混合導(dǎo)出
3、重命名export和import
到此這篇關(guān)于JavaScript ES6中類與模塊化管理超詳細(xì)講解的文章就介紹到這了,更多相關(guān)JS ES6類與模塊化管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談高大上的微信小程序中渲染html內(nèi)容—技術(shù)分享
大部分Web應(yīng)用的富文本內(nèi)容都是以HTML字符串的形式存儲(chǔ)的,那么在微信小程序中,應(yīng)當(dāng)如何渲染這部分內(nèi)容呢?感興趣的小伙伴們可以參考一下2018-10-10excel操作之Add Data to a Spreadsheet Cell
excel操作之Add Data to a Spreadsheet Cell...2007-06-06js實(shí)現(xiàn)瀑布流觸底動(dòng)態(tài)加載數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)瀑布流觸底動(dòng)態(tài)加載數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09JavaScript利用閉包實(shí)現(xiàn)模塊化
本文主要介紹了JavaScript利用閉包實(shí)現(xiàn)模塊化的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01原生JS使用Canvas實(shí)現(xiàn)拖拽式繪圖功能
這篇文章主要介紹了原生js實(shí)現(xiàn)Canvas實(shí)現(xiàn)拖拽式繪圖,支持畫筆、線條、箭頭、三角形和圓形等等圖形繪制功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-06-06JavaScript運(yùn)動(dòng)框架 解決防抖動(dòng)問題、懸浮對(duì)聯(lián)(二)
這篇文章主要為大家詳細(xì)介紹了JavaScript運(yùn)動(dòng)框架的第二部分,解決防抖動(dòng)問題、懸浮對(duì)聯(lián)問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05