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