国内精品久久久久影院一蜜桃,成人毛片无码一区二区,中文字幕色av一区二区三区,狠狠狼鲁亚洲综合网

13311025687

經(jīng)驗(yàn)共享,記錄互聯(lián)網(wǎng)發(fā)展腳步

在開拓網(wǎng)絡(luò)市場的路上,我們與您一路同行!

什么是構(gòu)造函數(shù),為什么使用構(gòu)造函數(shù)?

作者:千景縱橫 日期:2023-04-13 人氣:66

1.為什么使用構(gòu)造函數(shù): 


舉個(gè)例子,我們要錄入一年級(jí)一班中每一位同學(xué)的個(gè)人信息,那么我們可以創(chuàng)建一些對象,比如: 


var p1 = { name: 'zs', age: 6, gender: '男', hobby: 'basketball' }; 


var p2 = { name: 'ls', age: 6, gender: '女', hobby: 'dancing' }; 


var p3 = { name: 'ww', age: 6, gender: '女', hobby: 'singing' }; 


var p4 = { name: 'zl', age: 6, gender: '男', hobby: 'football' }; // ... 


像上面這樣,我們可以把每一位同學(xué)的信息當(dāng)做一個(gè)對象來處理。但是,我們會(huì)發(fā)現(xiàn),我們重復(fù)地寫了很多無意義的代碼。比如 name、age、gender、hobby 。如果這個(gè)班上有60個(gè)學(xué)生,我們得重復(fù)寫60遍。 


這個(gè)時(shí)候,構(gòu)造函數(shù)的優(yōu)勢就體現(xiàn)出來了。天津天迅達(dá)科技有限公司開發(fā)人員使用構(gòu)造函數(shù)等解決方案為您創(chuàng)建完美的程序 。我們發(fā)現(xiàn),雖然每位同學(xué)都有 name、gender、hobby這些屬性, 但它們都是不同的,那我們就把這些屬性當(dāng)做構(gòu)造函數(shù)的參數(shù)傳遞進(jìn)去。而由于都是一年級(jí)的學(xué)生,age 基本都是6歲,所以我們就可以寫死,遇到特殊情況再單獨(dú)做處理即可。此時(shí),我們就可以創(chuàng)建以下的函數(shù): 


function Person(name, gender, hobby) { 


                                                         this.name = name; 


                                                         this.gender = gender; 


                                                         this.hobby = hobby; 


                                                         this.age = 6; } 


當(dāng)創(chuàng)建上面的函數(shù)以后, 我們就可以通過 new 關(guān)鍵字調(diào)用,也就是通過構(gòu)造函數(shù)來創(chuàng)建對象了 


var p1 = new Person('zs', '男', 'basketball'); 


var p2 = new Person('ls', '女', 'dancing'); 


var p3 = new Person('ww', '女', 'singing'); 


var p4 = new Person('zl', '男', 'football'); // ... 


此時(shí)你會(huì)發(fā)現(xiàn),創(chuàng)建對象會(huì)變得非常方便。所以,雖然封裝構(gòu)造函數(shù)的過程會(huì)比較麻煩,但一旦封裝成功,我們再創(chuàng)建對象就會(huì)變得非常輕松,這也是我們?yōu)槭裁匆褂脴?gòu)造函數(shù)的原因。 


在使用對象字面量創(chuàng)建一系列同一類型的對象時(shí),這些對象可能具有一些相似的特征(屬性)和行為(方法),此時(shí)會(huì)產(chǎn)生很多重復(fù)的代碼,而使用構(gòu)造函數(shù)就可以實(shí)現(xiàn)代碼復(fù)用。 


2.構(gòu)造函數(shù)執(zhí)行過程: 


function Animal(color) { 


                                    this.color = color; 


                                } 


當(dāng)一個(gè)函數(shù)創(chuàng)建好以后,我們并不知道它是不是構(gòu)造函數(shù),即使像上面的例子一樣,函數(shù)名為大寫,我們也不能確定。只有當(dāng)一個(gè)函數(shù)以 new 關(guān)鍵字來調(diào)用的時(shí)候,我們才能說它是一個(gè)構(gòu)造函數(shù)。就像下面這樣:


var dog = new Animal("black"); 


以下我們只討論構(gòu)造函數(shù)的執(zhí)行過程,也就是以 new 關(guān)鍵字來調(diào)用的情況。 我們還是以上面的 Person 為例。 


function Person(name, gender, hobby) { 


                                                         this.name = name; 


                                                         this.gender = gender; 


                                                         this.hobby = hobby; 


                                                         this.age = 6; 


                                                       } 


var p1 = new Person('zs', '男', 'basketball'); 


此時(shí),構(gòu)造函數(shù)會(huì)有以下幾個(gè)執(zhí)行過程: 


(1) 當(dāng)以 new 關(guān)鍵字調(diào)用時(shí),會(huì)創(chuàng)建一個(gè)新的內(nèi)存空間,標(biāo)記為 Animal 的實(shí)例。 


(2)函數(shù)體內(nèi)部的 this 指向該內(nèi)存 。


通過以上兩步,我們就可以得出這樣的結(jié)論。 


var p2 = new Person('ls', '女', 'dancing'); // 創(chuàng)建一個(gè)新的內(nèi)存 #f2 


var p3 = new Person('ww', '女', 'singing'); // 創(chuàng)建一個(gè)新的內(nèi)存 #f3 


每當(dāng)創(chuàng)建一個(gè)實(shí)例的時(shí)候,就會(huì)創(chuàng)建一個(gè)新的內(nèi)存空間(#f2, #f3),創(chuàng)建 #f2 的時(shí)候,函數(shù)體內(nèi)部的 this 指向 #f2, 創(chuàng)建 #f3 的時(shí)候,函數(shù)體內(nèi)部的 this 指向 #f3。 


(3) 執(zhí)行函數(shù)體內(nèi)的代碼 


通過上面的講解,你就可以知道,給 this 添加屬性,就相當(dāng)于給實(shí)例添加屬性。


(4) 默認(rèn)返回 


this 由于函數(shù)體內(nèi)部的this指向新創(chuàng)建的內(nèi)存空間,默認(rèn)返回 this ,就相當(dāng)于默認(rèn)返回了該內(nèi)存空間,也就是上圖中的 #f1。此時(shí),#f1的內(nèi)存空間被變量p1所接受。也就是說 p1 這個(gè)變量,保存的內(nèi)存地址就是 #f1,同時(shí)被標(biāo)記為 Person 的實(shí)例。 


以上就是構(gòu)造函數(shù)的整個(gè)執(zhí)行過程。 


3 .構(gòu)造函數(shù)的返回值: 


構(gòu)造函數(shù)執(zhí)行過程的最后一步是默認(rèn)返回 this 。言外之意,構(gòu)造函數(shù)的返回值還有其它情況。下面我們就來聊聊關(guān)于構(gòu)造函數(shù)返回值的問題。 


(1) 沒有手動(dòng)添加返回值,默認(rèn)返回 this 


function Person1() { 


                             this.name = 'zhangsan'; 


                            } 


var p1 = new Person1(); 


(2) 手動(dòng)添加一個(gè)基本數(shù)據(jù)類型的返回值,最終還是返回 this 


function Person2() { 


                             this.age = 28; 


                             return 50; 


                            } 


 var p2 = new Person2(); 


 console.log(p2.age); // 28 


 p2: { 


         age: 28 


        } 


如果上面是一個(gè)普通函數(shù)的調(diào)用,那么返回值就是 50。 


(3) 手動(dòng)添加一個(gè)復(fù)雜數(shù)據(jù)類型(對象)的返回值,最終返回該對象 


function Person3() { 


                             this.height = '180'; 


                             return ['a', 'b', 'c']; 


                            } 


 var p3 = new Person3(); 


 console.log(p3.height); // undefined 


 console.log(p3.length); // 3 


 console.log(p3[0]); // 'a' 


總結(jié):當(dāng)你需要大批量的寫對象的時(shí)候,就需要用到構(gòu)造函數(shù),它可以方便創(chuàng)建多個(gè)對象的實(shí)例,并且創(chuàng)建的對象可以被標(biāo)識(shí)為特定的類型,可以通過繼承擴(kuò)展代碼。


北京千景縱橫科技有限公司成立于2011年,坐落北京中關(guān)村科技園區(qū)-專注高端網(wǎng)站建設(shè)(品牌展示型、官方門戶型、電子商務(wù)型、營銷型網(wǎng)站Html5響應(yīng)式)、微信小程序、APP開發(fā)、云服務(wù)器部署和運(yùn)維,為企事業(yè)單位的互聯(lián)網(wǎng)應(yīng)用提供一站式服務(wù)。


標(biāo)簽:千景縱橫  千景網(wǎng)絡(luò)  北京網(wǎng)站建設(shè)  北京網(wǎng)站設(shè)計(jì)  北京小程序開發(fā)  官網(wǎng)制作  門戶網(wǎng)站開發(fā)  商城網(wǎng)站建設(shè)

掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時(shí)期待你的聲音
解答:網(wǎng)站建設(shè)、UI設(shè)計(jì)、APP開發(fā)、小程序開發(fā)

北京千景縱橫科技有限公司成立于2008年,坐落北京中關(guān)村科技園區(qū)-專注高端網(wǎng)站建設(shè)(品牌展示型、官方門戶型、電子商務(wù)型、營銷型網(wǎng)站、Html5響應(yīng)式)、手機(jī)端應(yīng)用手機(jī)站、微網(wǎng)站、APP應(yīng)用、云服務(wù)器部署和運(yùn)維,為企事業(yè)單位的互聯(lián)網(wǎng)應(yīng)用提供一站式服務(wù)。

高端網(wǎng)站定制 / 應(yīng)用解決方案 / 品牌視覺設(shè)計(jì) / 軟件系統(tǒng)定制

?
北京市海淀區(qū)上地七街國際創(chuàng)業(yè)園東區(qū)2號(hào)樓9層
四川省成都市高新區(qū)萃華路國際科技節(jié)能大廈A座11層

Copyright ? 2023 北京千景縱橫科技有限公司  備案號(hào):京ICP備14059922號(hào)-1

關(guān)注我們

聯(lián)系千景高端建站顧問

免費(fèi)獲得專屬策劃方案