您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么使用JavaScript構(gòu)造函數(shù)創(chuàng)建對(duì)象”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么使用JavaScript構(gòu)造函數(shù)創(chuàng)建對(duì)象”吧!
JavaScript 構(gòu)造函數(shù)(Constructor)也稱為構(gòu)造器、類型函數(shù),功能類似對(duì)象模板,一個(gè)構(gòu)造函數(shù)可以生成任意多個(gè)實(shí)例,實(shí)例對(duì)象具有相同的屬性、行為特征,但不相等。
使用構(gòu)造函數(shù)可以創(chuàng)建不同類的對(duì)象。
構(gòu)造函數(shù)就是一個(gè)普通的函數(shù)。創(chuàng)建方式和普通函數(shù)沒有區(qū)別,構(gòu)造函數(shù)習(xí)慣上首字母大寫
構(gòu)造函數(shù)和普通函數(shù)的區(qū)別就是調(diào)用方式的不同
普通函數(shù)是直接調(diào)用
構(gòu)造函數(shù)需要使用new關(guān)鍵字來調(diào)用
三種形式this的指向情況。
當(dāng)以函數(shù)的形式調(diào)用時(shí),this是window
當(dāng)以方法的形式調(diào)用時(shí),誰調(diào)用方法this就是誰
當(dāng)以構(gòu)造函數(shù)的形式調(diào)用時(shí),this就是新創(chuàng)建的那個(gè)對(duì)象
立刻創(chuàng)建一個(gè)新的對(duì)象
將新建的對(duì)象設(shè)置為函數(shù)中this,在構(gòu)造函數(shù)中可以使用this來引用新建的對(duì)象(即this指向新創(chuàng)建的對(duì)象)
逐行執(zhí)行函數(shù)中的代碼
將新建的對(duì)象作為返回值返回
使用同一個(gè)構(gòu)造函數(shù)創(chuàng)建的對(duì)象,我們稱為一類對(duì)象,也將一個(gè)構(gòu)造函數(shù)稱為一個(gè)類。我們將通過一個(gè)構(gòu)造函數(shù)創(chuàng)建的對(duì)象,稱為是該類的實(shí)例。就上述而言O(shè)bj是一個(gè)類,而obj是Obj這個(gè)類的實(shí)例。
創(chuàng)建兩個(gè)類,一個(gè)Person類,一個(gè)Dog類。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> //構(gòu)造一個(gè)創(chuàng)建人的類 function Person(name , age , gender){ console.log('指向:',this); this.name = name; this.age = age ; this.gender = gender; this.sayName = function(){ console.log(this.name) } } //構(gòu)造一個(gè)創(chuàng)建狗的類 function Dog(name , age ){ console.log('指向:',this); this.name = name; this.age = age ; this.sayHello = function(){ console.log('汪汪汪~~'); } } //創(chuàng)建一個(gè)人的實(shí)例 var per = new Person('蘇涼',21,'男'); console.log(per); per.sayName(); //創(chuàng)建一個(gè)狗的實(shí)例 var dog = new Dog('旺財(cái)',5); console.log(dog); dog.sayHello(); </script></head><body> </body></html>
運(yùn)行結(jié)果:
構(gòu)造函數(shù)的好處在于,我們可以區(qū)分很多不同的對(duì)象,也就是可以清楚的知道創(chuàng)建的對(duì)象屬于哪一類,用普通創(chuàng)建對(duì)象和使用工廠模式創(chuàng)建對(duì)象都無法區(qū)分對(duì)象的種類,他們都屬于一個(gè)大類(Object)。
使用instanceof可以檢查一個(gè)對(duì)象是否是一個(gè)類的實(shí)例
語法:
對(duì)象 instanceof 構(gòu)造函數(shù)
如果是,則返回true,否則返回false
console.log(dog instanceof Dog); //true console.log(dog instanceof Person); //false console.log(dog instanceof Object); //true
所有的對(duì)象都是Object的后代,所以任何對(duì)象和0bject做instanceof檢查時(shí)都會(huì)返回true。
創(chuàng)建一個(gè)Person構(gòu)造函數(shù)
在Person構(gòu)造函數(shù)中,為每一個(gè)對(duì)象都添加了一個(gè)sayName方法
目前我們的方法是在構(gòu)造函數(shù)內(nèi)部創(chuàng)建的,也就是構(gòu)造函數(shù)每執(zhí)行一次就會(huì)創(chuàng)建一個(gè)新的sayName方法
也就是所有實(shí)例的sayName都是唯一的。
這樣會(huì)導(dǎo)致占用大量的內(nèi)存,對(duì)于每一個(gè)新創(chuàng)建的對(duì)象就會(huì)重新創(chuàng)建一個(gè)新的方法。
解決方法:將新創(chuàng)建對(duì)象的方法單獨(dú)提取出來,如下
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> //將新創(chuàng)建對(duì)象的方法單獨(dú)提取出來 function sayName(){ console.log(this.name) } //構(gòu)造一個(gè)創(chuàng)建人的類 function Person(name , age , gender){ console.log('指向:',this); this.name = name; this.age = age ; this.gender = gender; this.sayName = sayName; } var per = new Person('蘇涼',21,'男'); var per1 = new Person('小紅',18,'女'); console.log(per); per.sayName(); per1.sayName(); console.log(per.sayName == per1.sayName); //true </script></head><body> </body></html>
可以看出per的sayName方法和per1的sayName方法是一樣的。這樣就解決了創(chuàng)建不同的實(shí)例都會(huì)重新創(chuàng)建一個(gè)新的sayName方法,大大減少了內(nèi)存的占用。
知識(shí)擴(kuò)展
(1.)我們?yōu)槭裁葱枰獦?gòu)造函數(shù):
因?yàn)榍懊鎯煞N創(chuàng)建對(duì)象的方式一次只能創(chuàng)建一個(gè)對(duì)象。
(2.)什么是構(gòu)造函數(shù):
構(gòu)造函數(shù):就是把我們對(duì)象里面的一些相同的屬性和方法抽象出來封裝到函數(shù)里面
(3.)利用構(gòu)造函數(shù)創(chuàng)建對(duì)象及使用方法
構(gòu)造函數(shù)的函數(shù)名從第一個(gè)單詞開始,每個(gè)單詞的首寫字母都要大寫。
/ /4.在構(gòu)造函數(shù)里面我們的屬性和方法前面都必須加this關(guān)鍵字
//聲明構(gòu)造函數(shù)語法格式: function 構(gòu)造函數(shù)名() { this.屬性 = 值; this.方法 = function() {} } //調(diào)用構(gòu)造函數(shù)語法格式: new 構(gòu)造函數(shù)名();
以下是構(gòu)造函數(shù)語法格式的案例:
感謝各位的閱讀,以上就是“怎么使用JavaScript構(gòu)造函數(shù)創(chuàng)建對(duì)象”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)怎么使用JavaScript構(gòu)造函數(shù)創(chuàng)建對(duì)象這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。