教程:https://www.bilibili.com/video/av765113049/
DOCTYPEhtml><html><head><metacharset=”utf-8″/><title>061-070章總結(jié)title>head><body><pre>061.this解析器在調(diào)用函數(shù)每次都會向函數(shù)內(nèi)部傳遞進(jìn)一個隱含的參數(shù),
這個隱含的參數(shù)便是this,this指向的是一個目標(biāo),
這個目標(biāo)咱們稱為函數(shù)履行的上下文目標(biāo),
根據(jù)函數(shù)的調(diào)用辦法的不同,this會指向不同的目標(biāo)
1.以函數(shù)的辦法調(diào)用時,this永久都是window
2.以辦法的辦法調(diào)用時,this便是調(diào)用辦法的那個目標(biāo)pre><scripttype=”text/javascript”>console.log(“第061”);functionfun61(){
console.log(this.name)
}//以函數(shù)辦法調(diào)用,this是windowfun61()varobj611={
name:’obj611′,
sayName:fun61
}varobj612={
name:’obj612′,
sayName:fun61
}
console.log(obj611.sayName==fun61);//truevarname=”大局name”//以辦法的辦法調(diào)用,this是調(diào)用辦法的目標(biāo)obj611.sayName()script><pre>062.this的彌補(bǔ)pre><scripttype=”text/javascript”>console.log(“第062″)varage=”大局age”functionfun62(){
console.log(this.name)
}varobj621={
name:’obj621′,
sayName:fun62
}varobj622={
name:’obj622′,
sayName:fun62
}
obj621.sayName()script><pre>063.運(yùn)用工廠辦法創(chuàng)立目標(biāo)經(jīng)過該辦法能夠大批量的創(chuàng)立目標(biāo)pre><scripttype=”text/javascript”>console.log(“第063”);functioncreatePerson(name,age,gender){//創(chuàng)立一個新的目標(biāo)varobj=newObject()//向目標(biāo)中增加特點(diǎn)obj.name=name
obj.age=age
obj.gender=gender
obj.sayName=function(){
console.log(this.name)
}//將新的目標(biāo)回來returnobj
}varobj631=createPerson(“阿三”,18,”男”)
obj631.sayName()script><pre>064.結(jié)構(gòu)函數(shù)創(chuàng)立一個結(jié)構(gòu)函數(shù),專門用來創(chuàng)立Person目標(biāo)的
結(jié)構(gòu)函數(shù)便是一個一般的函數(shù),創(chuàng)立辦法和一般函數(shù)沒有差異,
不同的是結(jié)構(gòu)函數(shù)習(xí)慣上首字母大寫
結(jié)構(gòu)函數(shù)和一般函數(shù)的差異便是調(diào)用辦法的不同
一般函數(shù)是直接調(diào)用,而結(jié)構(gòu)函數(shù)需求運(yùn)用new關(guān)鍵字來調(diào)用
結(jié)構(gòu)函數(shù)的履行流程:
1.馬上創(chuàng)立一個新的目標(biāo)
2.將新建的目標(biāo)設(shè)置為函數(shù)中this,在結(jié)構(gòu)函數(shù)中能夠運(yùn)用this來引用新建的目標(biāo)
3.逐行履行函數(shù)中的代碼
4.將新建的目標(biāo)作為回來值回來
運(yùn)用同一個結(jié)構(gòu)函數(shù)創(chuàng)立的目標(biāo),咱們稱為一類目標(biāo),也將一個結(jié)構(gòu)函數(shù)稱為一個類。
咱們將經(jīng)過一個結(jié)構(gòu)函數(shù)創(chuàng)立的目標(biāo),稱為是該類的實(shí)例
this的狀況:
1.當(dāng)以函數(shù)的辦法調(diào)用時,this是window
2.當(dāng)以辦法的辦法調(diào)用時,誰調(diào)用辦法this便是誰
3.當(dāng)以結(jié)構(gòu)函數(shù)的辦法調(diào)用時,this便是新創(chuàng)立的那個目標(biāo)pre><scripttype=”text/javascript”>console.log(“第064”);functionPerson01(name,age,gender){this.name=namethis.age=agethis.gender=genderthis.sayName=function(){
console.log(this.name)
}
}varzhangSan=newPerson01(“張三”,30,”男”)
zhangSan.sayName()//運(yùn)用instanceof能夠查看一個目標(biāo)是否是一個類的實(shí)例console.log(zhangSaninstanceofPerson01)//一切的目標(biāo)都是Object的后代console.log(zhangSaninstanceofObject)script><pre>065.結(jié)構(gòu)函數(shù)修正pre><scripttype=”text/javascript”>console.log(“第065”);/**創(chuàng)立一個Person結(jié)構(gòu)函數(shù)
*-在Person結(jié)構(gòu)函數(shù)中,為每一個目標(biāo)都增加了一個sayName辦法,
*現(xiàn)在咱們的辦法是在結(jié)構(gòu)函數(shù)內(nèi)部創(chuàng)立的,
*也便是結(jié)構(gòu)函數(shù)每履行一次就會創(chuàng)立一個新的sayName辦法
*也是一切實(shí)例的sayName都是唯一的。
*這樣就導(dǎo)致了結(jié)構(gòu)函數(shù)履行一次就會創(chuàng)立一個新的辦法,
*履行10000次就會創(chuàng)立10000個新的辦法,而10000個辦法都是一摸相同的
*這是徹底沒有必要,徹底能夠使一切的目標(biāo)共享同一個辦法*/functionPerson02(name,age,gender){this.name=namethis.age=agethis.gender=gender
}//向原型中增加sayName辦法Person02.prototype.sayName=function(){
console.log(“我是”+this.name)
}varliSi=newPerson02(“李四”,25,”男”)
liSi.sayName();script><pre>066.原型目標(biāo)原型prototype
咱們所創(chuàng)立的每一個函數(shù),解析器都會向函數(shù)中增加一個特點(diǎn)prototype
這個特點(diǎn)對應(yīng)著一個目標(biāo),這個目標(biāo)便是咱們所謂的原型目標(biāo)
假如函數(shù)作為一般函數(shù)調(diào)用prototype沒有任何效果
當(dāng)函數(shù)以結(jié)構(gòu)函數(shù)的辦法調(diào)用時,它所創(chuàng)立的目標(biāo)中都會有一個隱含的特點(diǎn),
指向該結(jié)構(gòu)函數(shù)的原型目標(biāo),咱們能夠經(jīng)過__proto__來拜訪該特點(diǎn)
原型目標(biāo)就相當(dāng)于一個公共的區(qū)域,一切同一個類的實(shí)例都能夠拜訪到這個原型目標(biāo),
咱們能夠?qū)⒛繕?biāo)中共有的內(nèi)容,一致設(shè)置到原型目標(biāo)中。
當(dāng)咱們拜訪目標(biāo)的一個特點(diǎn)或辦法時,它會先在目標(biāo)自身中尋覓,假如有則直接運(yùn)用,
假如沒有則會去原型目標(biāo)中尋覓,假如找到則直接運(yùn)用
以后咱們創(chuàng)立結(jié)構(gòu)函數(shù)時,能夠?qū)⑦@些目標(biāo)共有的特點(diǎn)和辦法,一致增加到結(jié)構(gòu)函數(shù)的原型目標(biāo)中,
這樣不必分別為每一個目標(biāo)增加,也不會影響到大局效果域,就能夠使每個目標(biāo)都具有這些特點(diǎn)和辦法了pre><scripttype=”text/javascript”>console.log(“第066”);functionMyClass(){
}
MyClass.prototype.a=”prototype的a”MyClass.prototype.sayHello=function(){
console.log(“hello”)
}varmc01=newMyClass()
console.log(MyClass.prototype)
console.log(mc01.__proto__==MyClass.prototype)
mc01.a=”mc01的a”console.log(mc01)
mc01.sayHello()script><pre>067.原型目標(biāo)2原型目標(biāo)也是目標(biāo),所以它也有原型,
當(dāng)咱們運(yùn)用一個目標(biāo)的特點(diǎn)或辦法時,會現(xiàn)在自身中尋覓,
自身中假如有,則直接運(yùn)用,
假如沒有則去原型目標(biāo)中尋覓,假如原型目標(biāo)中有,則運(yùn)用,
假如沒有則去原型的原型中尋覓,直到找到Object目標(biāo)的原型,
Object目標(biāo)的原型沒有原型,假如在Object原型中仍然沒有找到,則回來undefinedpre><scripttype=”text/javascript”>console.log(“第067”);functionMyClass02(){
}
MyClass02.prototype.name=”prototype的name”varmc02=newMyClass02()
mc02.age=18//運(yùn)用in查看目標(biāo)中是否含有某個特點(diǎn)時,假如目標(biāo)中沒有但是原型中有,也會回來trueconsole.log(mc02)
console.log(“name”inmc02)//true//能夠運(yùn)用目標(biāo)的hasOwnProperty()來查看目標(biāo)自身中是否含有該特點(diǎn)console.log(mc02.hasOwnProperty(“age”))//trueconsole.log(mc02.hasOwnProperty(“name”))//falseconsole.log(mc02.hasOwnProperty(“hasOwnProperty”))//falseconsole.log(mc02.__proto__.hasOwnProperty(“hasOwnProperty”))//falseconsole.log(mc02.__proto__.__proto__.hasOwnProperty(“hasOwnProperty”))//trueconsole.log(mc02.__proto__.__proto__.__proto__)//nullconsole.log(MyClass02)
console.log(MyClass02.hasOwnProperty(“name”))//trueconsole.log(MyClass02.hasOwnProperty(“toString”))//falseconsole.log(MyClass02.hasOwnProperty(“hasOwnProperty”))//falseconsole.log(Object)
console.log(Object.hasOwnProperty(“hasOwnProperty”))//falseconsole.log(Object.prototype.hasOwnProperty(“hasOwnProperty”))//truescript><pre>068.toString()當(dāng)咱們直接在頁面中打印一個目標(biāo)時,事件上是輸出的目標(biāo)的toString()辦法的回來值
假如咱們希望在輸出目標(biāo)時不輸出[objectObject],能夠?yàn)槟繕?biāo)增加一個toString()辦法pre><scripttype=”text/javascript”>console.log(“第068″);functionPerson03(name,age,gender){this.name=namethis.age=agethis.gender=gender
}
console.log(Person03)//修正Person03原型的toStringPerson03.prototype.toString=function(){return”Person03[name=”+this.name+”,age=”+this.age+”,gender=”+this.gender+”]”}varwangSan=newPerson03(“王三”,20,”男”)varresult=wangSan.toString()
console.log(result)script><pre>069.廢物收回廢物收回(GC:garbagecollection)
-就像人日子的時刻長了會發(fā)生廢物相同,程序運(yùn)轉(zhuǎn)過程中也會發(fā)生廢物
這些廢物積累過多以后,會導(dǎo)致程序運(yùn)轉(zhuǎn)的速度過慢,
所以咱們需求一個廢物收回的機(jī)制,來處理程序運(yùn)轉(zhuǎn)過程中發(fā)生廢物
-當(dāng)一個目標(biāo)沒有任何的變量或特點(diǎn)對它進(jìn)行引用,此刻咱們將永久無法操作該目標(biāo),
此刻這種目標(biāo)便是一個廢物,這種目標(biāo)過多會占用大量的內(nèi)存空間,導(dǎo)致程序運(yùn)轉(zhuǎn)變慢,
所以這種廢物有必要進(jìn)行清理。
-在JS中具有主動的廢物收回機(jī)制,會主動將這些廢物目標(biāo)從內(nèi)存中銷毀,
咱們不需求也不能進(jìn)行廢物收回的操作
-咱們需求做的僅僅要將不再運(yùn)用的目標(biāo)設(shè)置null即可pre><scripttype=”text/javascript”>console.log(“第069″);varobj69=newObject();//對目標(biāo)進(jìn)行各種操作obj69=null;
console.log(obj69)script><pre>070.數(shù)組簡介數(shù)組(Array)
-數(shù)組也是一個目標(biāo)
-它和咱們一般目標(biāo)功能類似,也是用來存儲一些值的
-不同的是一般目標(biāo)是運(yùn)用字符串作為特點(diǎn)名的,
而數(shù)組時運(yùn)用數(shù)字來作為索引操作元素
索引:
從0開始的整數(shù)便是索引
-數(shù)組的存儲性能比一般目標(biāo)要好,在開發(fā)中咱們經(jīng)常運(yùn)用數(shù)組來存儲一些數(shù)據(jù)pre><scripttype=”text/javascript”>console.log(“第070”);//創(chuàng)立數(shù)組目標(biāo)vararr=newArray()//運(yùn)用typeof查看一個數(shù)組時,會回來objectconsole.log(typeofarr)
console.log(arrinstanceofObject)//trueconsole.log(arrinstanceofFunction)//false//向數(shù)組中增加元素語法:數(shù)組[索引]=值arr[0]=0arr[1]=1arr[5]=5arr[10]=10//讀取數(shù)組中的元素語法:數(shù)組[索引]假如讀取不存在的索引,他不會報錯而是回來undefinedconsole.log(arr[1])
console.log(arr[2])//undefined//能夠運(yùn)用length特點(diǎn)來獲取數(shù)組的長度(元素的個數(shù))語法:數(shù)組.length//對于接連的數(shù)組,運(yùn)用length能夠獲取到數(shù)組的長度(元素的個數(shù))//對于非接連的數(shù)組,運(yùn)用length會獲取到數(shù)組的最大的索引+1,盡量不要創(chuàng)立非接連的數(shù)組console.log(“arr長度=”+arr.length)//11//假如修正的length大于原長度,則多出部分會空出來//假如修正的length小于原長度,則多出的元素會被刪除arr.length=20console.log(arr.length)//20console.log(arr)//[0,1,empty×3,5,empty×4,10,empty×9]//向數(shù)組的最終一個方位增加元素//語法:數(shù)組[數(shù)組.length]=值;arr[arr.length]=70console.log(arr)//[0,1,empty×3,5,empty×4,10,empty×9,70]arr[arr.length]=80console.log(arr)//[0,1,empty×3,5,empty×4,10,empty×9,70,80]script>body>html>
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長沙市天心區(qū)芙蓉中路三段398號新時空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號