資源描述:
《js構(gòu)造函數(shù)、原型鏈、ajax筆記》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、一、This——運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定1、全局函數(shù):window2、函數(shù)作為某個(gè)對(duì)象obj的方法調(diào)用:obj3、匿名函數(shù):全局性,通常指向window4、修改this作用域:apply()、call()。第一個(gè)參數(shù)為目標(biāo)對(duì)象;第二個(gè)參數(shù):apply接收參數(shù)數(shù)組,call接受參數(shù)值二、閉包1、定義:有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中變量的函數(shù)2、實(shí)現(xiàn):在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)3、變量:只能取得包含函數(shù)中任何變量的最后一個(gè)值,保存的是整個(gè)變量對(duì)象(典型:for循環(huán)中的閉包總是返回最后一個(gè)循環(huán)的值,無(wú)法返回每次循環(huán)的值)4、解決:在閉包內(nèi)部再創(chuàng)建一個(gè)
2、匿名函數(shù)functionaa(){varresult;for(vari=0;i<10;i++){result[i]=function(num){//閉包returnfunction(){//閉包中再創(chuàng)建一個(gè)函數(shù)alert(num);}}(i);}}三、塊級(jí)作用域(function(){//塊級(jí)作用域,其中的變量在執(zhí)行結(jié)束后被銷毀})();四、創(chuàng)建對(duì)象1、簡(jiǎn)單方式varperson=newObject();person.name=“LL”;person.age=22;問(wèn)題:創(chuàng)建多個(gè)相似對(duì)象,大量重復(fù)代碼2、工廠模式functionPerson(na
3、me,age){varo=newObject();o.name=name;o.age=age;o.getName=function(){alert(this.name);}returno;}varperson1=newPerson(“LL”,22);person1.getName();//”LL”(1)根據(jù)接受的參數(shù)來(lái)構(gòu)建一個(gè)包含所有必要信息的Person對(duì)象,多次調(diào)用,每次返回一個(gè)包含兩個(gè)屬性和一個(gè)方法的對(duì)象。(2)優(yōu)點(diǎn):解決了創(chuàng)建多個(gè)相似對(duì)象的問(wèn)題問(wèn)題:對(duì)象識(shí)別的問(wèn)題,即怎樣知道一個(gè)對(duì)象的類型解決:構(gòu)造函數(shù)1、構(gòu)造函數(shù)模式functionPe
4、rson(name,age){this.name=name;this.age=age;this.getName=function(){alert(this.name);};}varperson1=newPerson(“LL”,22);(1)與工廠模式比較a.沒(méi)有顯示的創(chuàng)建對(duì)象;b.直接將屬性和方法賦值給this對(duì)象;c.沒(méi)有return語(yǔ)句;d.將實(shí)例標(biāo)識(shí)為一種特定的類型(instanceof);(2)構(gòu)造函數(shù)與普通函數(shù)區(qū)別a.習(xí)慣:構(gòu)造函數(shù)始終一個(gè)大寫(xiě)字母開(kāi)頭,非構(gòu)造函數(shù)以一個(gè)小寫(xiě)字母開(kāi)頭b.唯一區(qū)別:調(diào)用方式不同,用new調(diào)用為構(gòu)造函數(shù),不用
5、new為普通函數(shù)(3)Constructor屬性:標(biāo)識(shí)對(duì)象類型person1.constructor==Person;(4)Instanceof操作符:檢測(cè)對(duì)象類型person1既是Object的實(shí)例,也是Person的實(shí)例person1instanceofObject==true;person1instanceofPerson==true;(5)問(wèn)題:每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍解決:將方法定義在構(gòu)造函數(shù)外部新問(wèn)題:方法很多——定義很多全局函數(shù)——自定義的類型無(wú)封裝性解決:原型模式2、原型模式functionPerson(){};Per
6、son.prototype.name=”LL”;Person.protptype.age=22;Person.prototype.getName=function(){alert(this.name);}varperson1=newPerson();person1.job=“doctor”;alert(person1.name);//“LL”(1)函數(shù)的prototype屬性:指針,指向一個(gè)對(duì)象,該對(duì)象包含可以由特定類型的所有實(shí)例共享的屬性和方法。(2)與構(gòu)造函數(shù)區(qū)別:不必在構(gòu)造函數(shù)中定義對(duì)象實(shí)例的信息,將這些信息添加到原型對(duì)象中;(3)實(shí)例中訪
7、問(wèn)的都是同一組屬性和方法(4)原型對(duì)象a.函數(shù)的prototype(原型)屬性:指向函數(shù)的原型對(duì)象b.constructor(構(gòu)造函數(shù))屬性:包含一個(gè)指向prototype屬性所在函數(shù)的指針Person.prototype.constructor==Person;c.對(duì)象實(shí)例只可以訪問(wèn)保存在原型中的值,不可通過(guò)對(duì)象實(shí)例重寫(xiě)原型中的值d.為對(duì)象實(shí)例添加一個(gè)屬性時(shí),可屏蔽原型對(duì)象中的同名屬性,delet可以刪除新添加的屬性,重新訪問(wèn)原型中的屬性值(5)hasOwnProperty()——檢測(cè)一個(gè)屬性是在原型中還是實(shí)例中,實(shí)例中返回trueperson
8、1.hasOwnProperty(“name”)==flase;person1.hasOwnProperty(job)==true;(6