JS面向?qū)ο?-構(gòu)造函數(shù)

至今我們學(xué)習(xí)了很多調(diào)用函數(shù)的方式:
圓括號(hào)直接調(diào)用
對(duì)象打點(diǎn)調(diào)用
定時(shí)器調(diào)用
事件處理函數(shù)調(diào)用
數(shù)組枚舉調(diào)用

他們體現(xiàn)的不同點(diǎn)就是函數(shù)上下文不同 他們的this不一樣

現(xiàn)在我們學(xué)習(xí)新的函數(shù)調(diào)用方法,用new運(yùn)算符來(lái)調(diào)用函數(shù)

試著用new運(yùn)算符調(diào)用一個(gè)函數(shù):

function fun(){
  alert("你好")
}
new fun(); //你好  

函數(shù)可以執(zhí)行
也就是說(shuō)new是一個(gè)全新的調(diào)用函數(shù)的方式
我們關(guān)心的是,這個(gè)函數(shù)的上下文是

function fun(){
 // alert(this)   //object object
  this.name ="小明";
  this.age = 12;
  this.sex="男";

}
var obj = new fun(); 
alert(obj.age);   //12
//console.log(obj);  //fun{name:"小明",age:"12",”sex:"男"}

用new運(yùn)算符調(diào)用一個(gè)函數(shù)的時(shí)候 ,會(huì)經(jīng)歷四步走
1,函數(shù)內(nèi)部悄悄的創(chuàng)建一個(gè)局部變量,是一個(gè)空對(duì)象{}
2, 函數(shù)將自己的上下文設(shè)置為這個(gè){},即所有語(yǔ)句中的this就表示這個(gè)空對(duì)象
3,函數(shù)將執(zhí)行所有語(yǔ)句
4,所有語(yǔ)句執(zhí)行后,函數(shù)將return這個(gè)對(duì)象,函數(shù)將把自己的上下文返回.

所以,遇見(jiàn)new操作符,馬上想起四步走

目前為止,我們發(fā)現(xiàn),這個(gè)new運(yùn)算符能夠調(diào)用函數(shù),還能返回一個(gè)對(duì)象 ,
//構(gòu)造函數(shù),可以當(dāng)做一個(gè)”類(lèi)“ ,描述的是一類(lèi)對(duì)象需要擁有的屬性

function People(name,age,sex){
 // alert(this)   //object object
  this.name = name;
  this.age = age;
  this.sex=sex;

}
//類(lèi)的實(shí)例
var xiaoming = new People("小明","12","男");
var xiaohong = new People("小紅","15","女");
console.log(xiaoming);   //fun{name:"小明",age:"12",”sex:"男"}

console.log(xiaohong);

我們發(fā)現(xiàn)用new操作符,可以返回具有相同屬性群的對(duì)象。
我們說(shuō),Peoples可以認(rèn)為是一個(gè)”類(lèi)“,xiaomming ,xiaohong,xiaoqing都是這個(gè)類(lèi)的”實(shí)例“(instance)。
JS中沒(méi)有類(lèi)的概念,我們這里只有JAVA C++ C#做一個(gè)類(lèi)比,JS中只有構(gòu)造函數(shù)。當(dāng)一個(gè)函數(shù)被new操作符調(diào)用的時(shí)候,這個(gè)函數(shù)就是一個(gè)構(gòu)造函數(shù),它總能返回一類(lèi)具有相同屬性群的對(duì)象,感覺(jué)在”構(gòu)造東西“,所以這個(gè)函數(shù)很神奇,像一個(gè)模子,在制作類(lèi)似的對(duì)象。
為了提醒其他程序員,這是一個(gè)必須用new調(diào)用的函數(shù),換句話(huà)說(shuō)提醒別人這是一個(gè)構(gòu)造函數(shù),這類(lèi)函數(shù)的名字必須首字母大寫(xiě)。

我們看不用new操作符調(diào)用構(gòu)造函數(shù)會(huì)發(fā)生什么 ;

function People(name,age,sex){
 // alert(this)   //object object
  this.name = name;
  this.age = age;
  this.sex=sex;

}
People("小明","12","男");
alert(age);     //12

由于我們直接調(diào)用了構(gòu)造函數(shù),此時(shí)就是標(biāo)準(zhǔn)的函數(shù)直接加圓括號(hào)調(diào)用 ,函數(shù)里面的this是window對(duì)象,所以,此時(shí)name age sex 都被設(shè)置成了window對(duì)象的屬性,我們知道window對(duì)象的屬性是全局變量。此時(shí)能夠彈出12.

JS中沒(méi)有Class關(guān)鍵字(ECMAScript2016增加了Class關(guān)鍵字),我們就是使用new操作符的時(shí)候,會(huì)按"四步走"創(chuàng)建一些具有相同屬性群的實(shí)例,些時(shí)就感覺(jué)有了”類(lèi)“,JS只提”構(gòu)造函數(shù)‘,不提“類(lèi)”。

Javascript不是一個(gè)面向?qū)ο螅∣O)的語(yǔ)言,它只是基于對(duì)象(bo).

小題目:

function fun(){}
這個(gè)函數(shù)是不是一個(gè)構(gòu)造函數(shù)?答案是不知道,因?yàn)橹灰胣ew操作符調(diào)用一個(gè)函數(shù),此時(shí)這個(gè)函數(shù)就是一個(gè)構(gòu)造函數(shù)。至于函數(shù)名字沒(méi)有大寫(xiě),那只是習(xí)慣,不是語(yǔ)言要求

再來(lái),這個(gè)函數(shù)是不是構(gòu)造函數(shù):

function People(name,age){
  this.name = name;
  this.age = age;
}

答案也是不確定!因?yàn)橛胣ew調(diào)用它就是一個(gè)構(gòu)造函數(shù),不用new調(diào)用就不是

var obj = People("小明",12);

函數(shù)根本就沒(méi)有返回值,此時(shí)obj就是Null

obj == null  //true
obj.age;    //報(bào)錯(cuò)

**所以構(gòu)造函數(shù)沒(méi)有什么 ,就是全新的函數(shù)調(diào)用方式 **

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 參考文檔++Javascript面向?qū)ο缶幊蹋ǘ簶?gòu)造函數(shù)的繼承今天要介紹的是,對(duì)象之間的"繼承"的五種方法,怎...
    day_day_up閱讀 146評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,740評(píng)論 18 399
  • 一、面向過(guò)程和面向?qū)ο蟮膮^(qū)別、聯(lián)系 1.面向過(guò)程編程:注重解決問(wèn)題的步驟,分析問(wèn)題需要的每一步,實(shí)現(xiàn)函數(shù)依次調(diào)用。...
    空谷悠閱讀 941評(píng)論 1 11
  • 普通創(chuàng)建對(duì)象和字面量創(chuàng)建對(duì)象不足之處:雖然 Object 構(gòu)造函數(shù)或?qū)ο笞置媪慷伎梢杂脕?lái)創(chuàng)建單個(gè)對(duì)象,但這些方式有...
    believedream閱讀 2,588評(píng)論 2 18
  • 從9月18日到今天,可以說(shuō)這周是開(kāi)學(xué)以來(lái)最忙碌的!周一晚上整理了創(chuàng)文材料,那天正好婆婆回老家,我得自己帶...
    匆匆十年閱讀 273評(píng)論 0 1

友情鏈接更多精彩內(nèi)容