




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、JavaScript程序設(shè)計基礎(chǔ)第八章 對象教學(xué)課件培訓(xùn)講師: 培訓(xùn)時間:知識架構(gòu)對象1對象的基本概念2創(chuàng)建對象3對象的屬性內(nèi)置對象4回顧JavaScript的數(shù)據(jù)類型有哪些?如何來存儲多個數(shù)據(jù)?window、document是什么?案例引入連續(xù)輸入10個學(xué)生的姓名、學(xué)號、性別、出生日期,保存到數(shù)組中。并完成以下操作:以表格形式輸出;點擊添加按鈕,可添加一個學(xué)生;每個學(xué)生后面有一個刪除按鈕,點擊可刪除該學(xué)生;【案例思考】每個學(xué)生信息都包含了姓名、學(xué)號、性別、出生日期,我們?nèi)绾蝸砻枋龊痛鎯Χ鄠€學(xué)生信息呢?上一章所學(xué)二維數(shù)組可以用來存儲,但是通過索引來存和取都容易出錯,那如何存儲?這就需要我們利用
2、JavaScript中的復(fù)合數(shù)據(jù)類型對象來描述學(xué)生信息,再用一維數(shù)組來存儲了。面向?qū)ο蟾攀霰竟?jié)內(nèi)容主要有:面向?qū)ο蠡靖拍?面向?qū)ο蠡咎卣饕磺卸际菍ο?/38面向?qū)ο蠡靖拍蠲嫦驅(qū)ο蠓椒?Object-Oriented Method)是一種把面向?qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動的系統(tǒng)方法,簡稱OO(Object-Oriented)方法對象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實體有直接對應(yīng)關(guān)系,一個對象類定義了具有相似性質(zhì)的一組對象面向?qū)ο缶褪腔趯ο蟾拍?,以對象為中心,以類和繼承為構(gòu)造機(jī)制,來認(rèn)識、理解、刻畫客觀世界和設(shè)計、構(gòu)建相應(yīng)的軟件系統(tǒng)6/38面向?qū)ο蠡靖拍顚ο螅╫b
3、ject)可以指具體的事物也可以指抽象的事物,是要研究的任何事物。每個對象皆有自己的內(nèi)部狀態(tài)和運動規(guī)律,在面向?qū)ο蟾拍钪形覀儼褜ο蟮膬?nèi)部狀態(tài)稱為屬性、運動規(guī)律成為方法。對象有以下特點:對象具有屬性和行為。對象具有變化的狀態(tài)。對象具有唯一性。一切皆為對象,真實世界中的所有事物都可以視為對象。7/38面向?qū)ο蠡靖拍?/38對象屬性方法 = Fiatcar.model = 500car.weight = 850kgcar.color = whitecar.start()car.drive()car.brake() car.stop()面向?qū)ο蠡靖拍顚傩裕簩傩允菍ο蟮奶卣鲾?shù)據(jù),它
4、是對客觀世界實休所具有的性質(zhì)的抽象。對象都有自己特有的屬性值。比如姓名、性別就可以作為員工的屬性而出現(xiàn)。方法:方法就是對象所能執(zhí)行的操作,也就是類中所定義的服務(wù)。方法描述了對象執(zhí)行操作的算法,響應(yīng)消息的方法。9/38面向?qū)ο蟮奶卣髅嫦驅(qū)ο笥?大基本特征:封裝、繼承、多態(tài)封裝,就是指把內(nèi)部的實現(xiàn)隱藏起來,然后只暴露必要的方法讓外部調(diào)用繼承,就是子類繼承父類,擁有父類所定義的屬性和行為多態(tài),外部直接調(diào)用一個方法接口,然后具體實現(xiàn)的內(nèi)容由實際處理的類來決定使用基類或者子類的方法10/38面向?qū)ο蟮奶卣鱆avaScript可以模擬實現(xiàn)繼承和封裝,但是無法模擬實現(xiàn)多態(tài),所以我們說JavaScript是一
5、門基于對象的語言,而非是面向?qū)ο蟮恼Z言11/38一切都是對象在 JavaScript中,幾乎所有的事物都是對象JavaScript對值進(jìn)行任意區(qū)分:原始值和對象。原始值包括布爾值,數(shù)字,字符串,null和undefined。JavaScript中的其他所有內(nèi)容都被認(rèn)為是一個對象,這意味著window,JSON,Math甚至函數(shù)和數(shù)組都是對象。12/38一切都是對象原始值和對象的比較:對象是引用類型,變量名中存儲的是具體數(shù)據(jù)存放在內(nèi)存中的地址。原始值,變量名中存儲的具體數(shù)據(jù)。13/38var number1=10;var number2=10;alert(number1=number2);/輸出
6、truevar obj1=;var obj2=;alert(obj1=obj2); /輸出false一切都是對象對象屬性是可變的,即它們可以被改變。可以添加,刪除或更改對象的屬性。原始值類型屬性是不可變的,即它們不能被更改,只能讀取。14/38一切都是對象在JavaScript中對象包括數(shù)組,函數(shù),內(nèi)置對象和用戶定義的對象。但有趣的是,原始值也像對象一樣!這就是為什么JavaScript中幾乎所有東西都是對象!如下示例,當(dāng)我們訪問length屬性時stringVariable,它將被轉(zhuǎn)換為Object并length訪問該屬性。訪問屬性后,它將返回原始值string。15/38var strin
7、gVar=”hello”;console.log(stringVar.length); /返回5console.log(stringVar.substring(0,2); /返回he自定義對象本節(jié)內(nèi)容主要有:對象的定義 訪問對象成員遍歷對象深拷貝和淺拷貝16/38定義對象對象是引用數(shù)據(jù)類型,引用數(shù)據(jù)類型就相當(dāng)于一個模板!當(dāng)我們想要用某個引用類型的時候,就需要用這個模版來生成一個對象來使用。產(chǎn)生對象的過程,稱為對象的定義或創(chuàng)建。創(chuàng)建對象方式有:new 構(gòu)造函數(shù)字面量17/38定義對象字面量,使用var 對象名=屬性名:屬性值,.或18/38var person = ; =
8、jiangshui;person.sayName = function() console.log();var person = name:”jiangshui”,sayName:function() console.log(); ;定義對象構(gòu)造函數(shù),用于創(chuàng)建對象的函數(shù)利用Object()創(chuàng)建對象19/38var person = new Object(); = jiangshui;person.sayName = function() console.log();定義對象利用自定義構(gòu)造函數(shù)創(chuàng)建對象20/38funct
9、ion Techer(name,sex,age,say) =name; this.sex=sex; this.age=age; this.say=say;var say=function() alert(“我是教師”);var techer=new Teacher(“張三”,”男”,35,say);對象成員對象的屬性和方法統(tǒng)稱為對象的成員在JavaScript中,可以使用“ . ”和“ ”來訪問對象的屬性二者區(qū)別:“ . ”表示法一般作為靜態(tài)對象使用時來存取屬性。而“ ”表示法在動態(tài)存取屬性(變量)時就非常有用。在JavaScript中,只能用“ . ”來訪問對象的方法21/
10、38var object = name:xiaoming,age:29;var name1 = ;var name2 = objectname;對象成員案例1:判斷一個字符串中出現(xiàn)次數(shù)最多的字符,統(tǒng)計這個次數(shù)。案例2:編寫arraysSimilar函數(shù),實現(xiàn)判斷傳入的兩個數(shù)組是否相似22/38演示示例1:出現(xiàn)次數(shù)最多的字符演示示例2:相似數(shù)組遍歷對象JavaScript使用for in語句來遍歷對象的屬性和方法。for in 語句循環(huán)遍歷 JavaScript 對象,每循環(huán)一次,都會取得對象的一個屬性或方法。語法:其中,valueName 是變量名,保存著屬性或方法的名稱
11、,每次循環(huán),valueName 的值都會改變23/38for(valueName in ObjectName) / 代碼遍歷對象案例3:判斷一個字符串中出現(xiàn)次數(shù)最多的字符,統(tǒng)計這個次數(shù)。案例4:編寫arraysSimilar函數(shù),實現(xiàn)判斷傳入的兩個數(shù)組是否相似24/38演示示例3:for in遍歷對象屬性演示示例4:統(tǒng)計字符出現(xiàn)次數(shù)構(gòu)造函數(shù)本節(jié)內(nèi)容主要有:為什么需要構(gòu)造函數(shù) 內(nèi)置構(gòu)造函數(shù)自定構(gòu)造函數(shù)私有成員25/38為什么需要構(gòu)造函數(shù)創(chuàng)建對象的方式包括兩種:對象字面量和使用new表達(dá)式。對象字面量是一種靈活方便的書寫方式。但每創(chuàng)建一個新的對象都需要寫出完整的定義語句,不便于創(chuàng)建大量相同類型的對
12、象,不利于使用繼承等高級特性。26/38為什么需要構(gòu)造函數(shù)new表達(dá)式是配合構(gòu)造函數(shù)使用。如:在使用new操作符來調(diào)用一個構(gòu)造函數(shù)的時候,發(fā)生了什么呢?27/38function CO() this.p = “Im in constructed object”; this.alertP = function() alert(this.p); var o2 = newCO();為什么需要構(gòu)造函數(shù)使用new操作符來調(diào)用一個構(gòu)造函數(shù)的時候,發(fā)生了如下四件事:第一行,創(chuàng)建一個空對象obj。第二行,將這個空對象的_proto_成員指向了構(gòu)造函數(shù)對象的prototype成員對象,這是最關(guān)鍵的一步,具體細(xì)節(jié)
13、將在下文描述。第三行,將構(gòu)造函數(shù)的作用域賦給新對象,因此CO函數(shù)中的this指向新對象obj,然后再調(diào)用CO函數(shù)。于是我們就給obj對象賦值了一個成員變量p,這個成員變量的值是” Imin constructed object”。第四行,返回新對象obj28/38var obj =;obj._proto_ = CO.prototype;CO.call(obj);return obj;為什么需要構(gòu)造函數(shù)同一個構(gòu)造函數(shù)創(chuàng)建的所有對象都繼承自一個相同的對象。new表達(dá)式不僅僅是對這四個步驟的簡化,也是要實現(xiàn)繼承的必經(jīng)之路。29/38內(nèi)置構(gòu)造函數(shù)JavaScript中包含九個原生(或內(nèi)置)對象構(gòu)造函數(shù)
14、。1,Number()2,String()3,Boolean()4,Object()5,Array()6,F(xiàn)unction()7,Date()8,RegExp()9,Error()30/38自定義構(gòu)造函數(shù)JavaScript的構(gòu)造函數(shù)并不是作為類的一個特定方法存在的。當(dāng)任意一個普通函數(shù)用于創(chuàng)建一類對象時,它就被稱作構(gòu)造函數(shù),或構(gòu)造器。一個函數(shù)要作為一個真正意義上的構(gòu)造函數(shù),需要滿足下列條件:1、 在函數(shù)內(nèi)部對新對象(this)的屬性進(jìn)行設(shè)置,通常是添加屬性和方法。2、 構(gòu)造函數(shù)可以包含返回語句(不推薦),但返回值必須是this,或者其它非對象類型的值。31/38自定義構(gòu)造函數(shù)示例:可以正確返回
15、一個對象對象o1的原型是函數(shù)C1內(nèi)部定義的對象o的原型不便于創(chuàng)建大量相同類型的對象,不利于使用繼承等高級特性32/38function C1() var o = p:hello world return o;var o1 = new C1();alert(o1.p); / hello world自定義構(gòu)造函數(shù)示例:既可以用作構(gòu)造函數(shù)來構(gòu)造一個對象,也可以作為普通的函數(shù)來使用作普通函數(shù)時,它接收兩個參數(shù),并返回兩者的相加的結(jié)果不便于創(chuàng)建大量相同類型的對象,不利于使用繼承等高級特性33/38function C2(a, b) this.p = a + b; this.alertP = functi
16、on() alert(this.p); return this.p;/此返回語句在C2作為構(gòu)造函數(shù)時沒有意義var c2 = new C2(2,3);c2.alertP(); /結(jié)果為5alert(C2(2, 3); /結(jié)果為5自定義構(gòu)造函數(shù)建議:為了代碼的可讀性和可維護(hù)性,建議作為構(gòu)造函數(shù)的函數(shù)不要摻雜除構(gòu)造作用以外的代碼;同樣的,一般的功能函數(shù)也不要用作構(gòu)造對象34/38私有成員1. 基于編碼規(guī)范約定實現(xiàn)方式以下劃線_開頭的變量約定為私有成員,便于同團(tuán)隊開發(fā)人員的協(xié)同工作很容易被打破,且并沒有實現(xiàn)私有屬性,上述代碼中的實例person可以直接訪問到_name屬性35/38function
17、Person(name) this._name = name;var person = new Person(Joe);私有成員2. 基于閉包的實現(xiàn)方式以下劃線_開頭的變量約定為私有成員,便于同團(tuán)隊開發(fā)人員的協(xié)同工作很容易被打破,且并沒有實現(xiàn)私有屬性,上述代碼中的實例person可以直接訪問到_name屬性36/38function Person(name) var _name = name; this.getName = function() return _name; var person = new Person(Joe);私有成員3. 基于強引用散列表的實現(xiàn)方式37/38var Per
18、son = (function() var privateData = , privateId = 0; function Person(name) Object.defineProperty(this, _id, value: privateId+ ); privateDatathis._id = name: name ; Ptotype.getName = function() return privateDatathis._; ; return Person;();私有成員3. 基于強引用散列表的實現(xiàn)方式使用自執(zhí)行函數(shù)創(chuàng)建Person類,變量private
19、Data和privateId被所有實例共享privateData用來儲存每個實例的私有屬性name的key-value,privateId用來分配每個實例的唯一標(biāo)識符_id方法getName存在于prototype上,被所有實例共享散列表privateData對每個實例都是強引用,導(dǎo)致實例不能被垃圾回收處理38/38私有成員4. 基于ES6的WeakMap的實現(xiàn)方式39/38var Person = (function() var privateData = new WeakMap(); function Person(name) privateData.set(this, name: nam
20、e ); Ptotype.getName = function() return privateData.get(this).name; ; return Person;();私有成員4. 基于ES6的WeakMap的實現(xiàn)方式支持使用對象類型作為key值弱引用不必為每個實例都創(chuàng)建一個唯一標(biāo)識符,因為實例本身便可以作為WeakMap的key如果沒有其他引用和該鍵引用同一個對象,這個對象將會被當(dāng)作垃圾回收掉目前瀏覽器對WeakMap的支持率并不理想,投入生產(chǎn)環(huán)境仍然需要等待40/38this在使用中出錯的機(jī)率也非常大它不是固定不變的,而是隨著它的執(zhí)行環(huán)境的改變而改變this總是指
21、向調(diào)用它所在方法的對象,即誰調(diào)用就是誰41/38this1. 全局的函數(shù)調(diào)用this為window42/38 var name = global this; function globalTest() console.log(); globalTest(); /global thisthis2. 對象方法的調(diào)用this為obj43/38 function showName() console.log(); var obj = ; = ooo; obj.show = showName; obj.show(); /ooothis3. 構(gòu)造函數(shù)的
22、調(diào)用this為obj44/38function showName() = showName function; var obj = new showName(); console.log(); /showName function內(nèi)置對象本節(jié)內(nèi)容主要有:String對象 Math對象Date對象Number對象RegExp對象45/38String對象String對象通過特有的屬性和方法來操作或獲取有關(guān)文本的信息String對象只有一個常用屬性length,不能修改,只能讀取,表示該字符串的長度46/38var str=”hello world”;alert
23、(str.toUpperCase();alert(str.length);String對象常用方法47/38語法功能String()構(gòu)造函數(shù),用來構(gòu)建一個字符串對象charAt()返回指定索引位置的字符,索引從0開始。indexOf()返回指定字符串首次出現(xiàn)的索引位置。沒有找到,則返回-1。第2個參數(shù)表示從該索引位置開始查詢,可無。split()以指定字符串進(jìn)行分隔,返回分隔后的字符串?dāng)?shù)組。第2個參數(shù)表示分隔的字符串個數(shù),可無substring()截取字符串中的一部分。第一個參數(shù)代表截取的開始索引,第二個參數(shù)代表結(jié)束索引,不含該索引的字符,省略則到結(jié)尾。String對象常用方法48/38語法功
24、能substr()提取指定數(shù)目的字符。第一個參數(shù)代表截取的開始索引,第二個參數(shù)代表提取字符個數(shù),省略則到結(jié)尾。第一個參數(shù)為負(fù)數(shù),則從字符串結(jié)尾開始,例如,-1代表倒數(shù)第一個字符lastIndexOf()從后面開始搜索子串的位置toUpperCase()將字符串轉(zhuǎn)換為大寫并返回toLowerCase()將字符串轉(zhuǎn)換為小寫并返回trim()移除字符串開頭和結(jié)尾處的空白字符并返回String對象常用方法49/38語法功能concat(value1,value2 . valueN)連接一個或多個字符串,并返回連接后的字符串 localeCompare(value)實例與參數(shù)進(jìn)行比較,返回比較結(jié)果,返回
25、值:0 :實例比參數(shù)大1 :實例與參數(shù)相等 -1 :實例比參數(shù)小replace(regexp, replaceStr)替換正則表達(dá)式匹配的子串,并返回替換后的字符串演示示例5:判斷是否是回文內(nèi)置對象MathMath 對象用于執(zhí)行數(shù)學(xué)任務(wù)。Math 對象沒有構(gòu)造函數(shù) Math()。常用屬性名稱說明E返回算術(shù)常量 e,即自然對數(shù)的底數(shù)(約等于2.718)。LN2返回 2 的自然對數(shù)(約等于0.693)。LN10返回 10 的自然對數(shù)(約等于2.302)。LOG2E返回以 2 為底的 e 的對數(shù)(約等于 1.4426950408889634)。LOG10E返回以 10 為底的 e 的對數(shù)(約等于0.
26、434)。PI返回圓周率(約等于3.14159)。SQRT1_2返回 2 的平方根的倒數(shù)(約等于 0.707)。SQRT2返回 2 的平方根(約等于 1.414)。內(nèi)置對象Math常用方法名稱說明abs(x)返回 x 的絕對值。acos(x)返回 x 的反余弦值。asin(x)返回 x 的反正弦值。atan(x)以介于 -PI/2 與 PI/2 弧度之間的數(shù)值來返回 x 的反正切值。atan2(y,x)返回從 x 軸到點 (x,y) 的角度(介于 -PI/2 與 PI/2 弧度之間)。ceil(x)對數(shù)進(jìn)行上舍入。cos(x)返回數(shù)的余弦。exp(x)返回 Ex 的指數(shù)。floor(x)對 x
27、 進(jìn)行下舍入。log(x)返回數(shù)的自然對數(shù)(底為e)。內(nèi)置對象Math常用方法名稱說明max(x,y,z,.,n)返回 x,y,z,.,n 中的最高值。min(x,y,z,.,n)返回 x,y,z,.,n中的最低值。pow(x,y)返回 x 的 y 次冪。random()返回 0 1 之間的隨機(jī)數(shù)。round(x)四舍五入。sin(x)返回數(shù)的正弦。sqrt(x)返回數(shù)的平方根。tan(x)返回角的正切。演示示例6:隨機(jī)產(chǎn)生十六進(jìn)制的顏色值內(nèi)置對象Date常用方法名稱說明getDate()從 Date 對象返回一個月中的某一天 (1 31)。getDay()從 Date 對象返回一周中的某一天
28、 (0 6)日-六getFullYear()從 Date 對象以四位數(shù)字返回年份。getHours()返回 Date 對象的小時 (0 23)。getMilliseconds()返回 Date 對象的毫秒(0 999)。getMinutes()返回 Date 對象的分鐘 (0 59)。getMonth()從 Date 對象返回月份 (0 11)。getSeconds()返回 Date 對象的秒數(shù) (0 59)。toDateString()把 Date 對象的日期部分轉(zhuǎn)換為字符串。toJSON()以 JSON 數(shù)據(jù)格式返回日期字符串。內(nèi)置對象Date常用方法名稱說明toLocaleDateStr
29、ing()根據(jù)本地時間格式,把 Date 對象的日期部分轉(zhuǎn)換為字符串。toLocaleTimeString()根據(jù)本地時間格式,把 Date 對象的時間部分轉(zhuǎn)換為字符串。toLocaleString()據(jù)本地時間格式,把 Date 對象轉(zhuǎn)換為字符串。 setDate()設(shè)置 Date 對象中月的某一天 (1 31)。setFullYear()設(shè)置 Date 對象中的年份(四位數(shù)字)。setHours()設(shè)置 Date 對象中的小時 (0 23)。setMilliseconds()設(shè)置 Date 對象中的毫秒 (0 999)。setMinutes()設(shè)置 Date 對象中的分鐘 (0 59)。s
30、etMonth()設(shè)置 Date 對象中月份 (0 11)。setSeconds()設(shè)置 Date 對象中的秒鐘 (0 59)。內(nèi)置對象Date常用方法名稱說明getTime()當(dāng)前時間對象距1970年的毫秒數(shù)now()靜態(tài)方法,當(dāng)前時間的毫秒數(shù)parse()靜態(tài)方法,字符串轉(zhuǎn)換成Date對象演示示例7:某年某月的哪些天是周六和周日內(nèi)置對象Number原始數(shù)值的包裝對象常用屬性名稱說明MAX_VALUE可表示的最大的數(shù)。MIN_VALUE可表示的最小的數(shù)。NaN非數(shù)字值。NEGATIVE_INFINITY負(fù)無窮大,溢出時返回該值。POSITIVE_INFINITY正無窮大,溢出時返回該值。內(nèi)置
31、對象Number常用方法名稱說明toString()把數(shù)字轉(zhuǎn)換為字符串,按基數(shù)轉(zhuǎn)換。toLocaleString()把數(shù)字轉(zhuǎn)換為字符串,使用本地數(shù)字格式順序。toFixed()把數(shù)字轉(zhuǎn)換為字符串,結(jié)果的小數(shù)點后有指定位數(shù)的數(shù)字(四舍五入)。toExponential()把對象的值轉(zhuǎn)換為指數(shù)計數(shù)法。toPrecision()把數(shù)字格式化為指定的長度(四舍五入,不含小數(shù)點)。valueOf()返回一個 Number 對象的基本數(shù)字值。內(nèi)置對象RegExpRegExp 對象表示正則表達(dá)式,它是對字符串執(zhí)行模式匹配的強大工具。語法:var patt=new RegExp(pattern,modifie
32、rs);或更簡單的方法:var patt=/pattern/modifiers;表達(dá)式pattern,修飾符modifiers如:var re = new RegExp(w+);var re = /w+/;內(nèi)置對象RegExpRegExp 修飾符:修飾符用于執(zhí)行不區(qū)分大小寫和全文的搜索。i- 修飾符是用來執(zhí)行不區(qū)分大小寫的匹配。g- 修飾符是用于執(zhí)行全文的搜索(而不是在找到第一個就停止查找,而是找到所有的匹配)。m 多行搜索如:var str=Is this all there is?;var patt1=/is/g; /is isvar patt2=/is/gi; /Is is is內(nèi)置對象
33、RegExp常用屬性名稱說明globalRegExp 對象是否具有標(biāo)志 g。ignoreCaseRegExp 對象是否具有標(biāo)志 i。lastIndex一個整數(shù),標(biāo)示開始下一次匹配的字符位置。multilineRegExp 對象是否具有標(biāo)志 m。source正則表達(dá)式的源文本。內(nèi)置對象RegExp常用方法名稱說明compile編譯正則表達(dá)式。exec檢索字符串中指定的值。返回找到的值,并確定其位置。test檢索字符串中指定的值。返回 true 或 false。內(nèi)置對象RegExp正則表達(dá)式:使用通配符描述的表達(dá)式方括號:用于查找某個范圍內(nèi)的字符名稱說明abc查找方括號之間的任何字符。abc查找任
34、何不在方括號之間的字符。0-9查找任何從 0 至 9 的數(shù)字。a-z查找任何從小寫 a 到小寫 z 的字符。A-Z查找任何從大寫 A 到大寫 Z 的字符。A-z查找任何從大寫 A 到小寫 z 的字符。adgk查找給定集合內(nèi)的任何字符。adgk查找給定集合外的任何字符。(red|blue|green)查找任何指定的選項。內(nèi)置對象RegExp元字符:擁有特殊含義的字符名稱說明.查找單個字符,除了換行和行結(jié)束符。w查找單詞字符(數(shù)字、字母)。W查找非單詞字符。d查找數(shù)字。D查找非數(shù)字字符。s查找空白字符。S查找非空白字符。b匹配單詞邊界。B匹配非單詞邊界。0查找 NUL 字符。內(nèi)置對象RegExp元
35、字符:擁有特殊含義的字符名稱說明n查找換行符。f查找換頁符。r查找回車符。t查找制表符。v查找垂直制表符。xxx查找以八進(jìn)制數(shù) xxx 規(guī)定的字符。xdd查找以十六進(jìn)制數(shù) dd 規(guī)定的字符。uxxxx查找以十六進(jìn)制數(shù) xxxx 規(guī)定的 Unicode 字符。內(nèi)置對象RegExp量詞:擁有特殊含義的字符名稱說明n+匹配任何包含至少一個 n 的字符串。n*匹配任何包含零個或多個 n 的字符串。n?匹配任何包含零個或一個 n 的字符串。nX匹配包含 X 個 n 的序列的字符串。nX,Y匹配包含 X 至 Y 個 n 的序列的字符串。nX,匹配包含至少 X 個 n 的序列的字符串。n$匹配任何結(jié)尾為 n
36、 的字符串。n匹配任何開頭為 n 的字符串。?=n匹配任何其后緊接指定字符串 n 的字符串。?!n匹配任何其后沒有緊接指定字符串 n 的字符串。內(nèi)置對象RegExp示例:1、檢測字符串中是否包含特殊字符/(left|right|center)$/i 2、只能是數(shù)字d+$ d1,$ 3、只能輸入長度為3的字符.3$ 4、只能輸入非零的負(fù)整數(shù)-1-90-9*$ 5、驗證密碼:以字母開頭和結(jié)尾的6-18位字符串A-Za-zS4,16A-Za-z$ 演示示例8:檢測字符串中是否包含特殊字符實現(xiàn)繼承定義父類:67/38 / 定義一個動物類function Animal (name) / 屬性 this.
37、name = name | Animal; / 實例方法 this.sleep = function() console.log( + 正在睡覺!); / 原型方法Atotype.eat = function(food) console.log( + 正在吃: + food);實現(xiàn)繼承1. 原型鏈繼承68/38function Cat() Ctotype = new Animal();C = cat;/Test Codevar cat = new Cat();console.log(cat.na
38、me);console.log(cat.eat(fish);console.log(cat.sleep();console.log(cat instanceof Animal); /true console.log(cat instanceof Cat); /true實現(xiàn)繼承1. 原型鏈繼承非常純粹的繼承關(guān)系,實例是子類的實例,也是父類的實例父類新增原型方法/原型屬性,子類都能訪問到簡單,易于實現(xiàn)要想為子類新增屬性和方法,必須要在new Animal()這樣的語句之后執(zhí)行,不能放到構(gòu)造器中無法實現(xiàn)多繼承來自原型對象的所有屬性被所有實例共享(來自原型對象的引用屬性是所有實例共享的)(詳細(xì)請看附錄
39、代碼:示例1)創(chuàng)建子類實例時,無法向父類構(gòu)造函數(shù)傳參69/38實現(xiàn)繼承2. 構(gòu)造繼承70/38function Cat(name) Animal.call(this); = name | Tom;/ Test Codevar cat = new Cat();console.log();console.log(cat.sleep();console.log(cat instanceof Animal); / falseconsole.log(cat instanceof Cat); / true實現(xiàn)繼承2. 構(gòu)造繼承解決了1中,子類實例共享父類引用屬性的問題創(chuàng)
40、建子類實例時,可以向父類傳遞參數(shù)可以實現(xiàn)多繼承(call多個父類對象)實例并不是父類的實例,只是子類的實例只能繼承父類的實例屬性和方法,不能繼承原型屬性/方法無法實現(xiàn)函數(shù)復(fù)用,每個子類都有父類實例函數(shù)的副本,影響性能71/38實現(xiàn)繼承3. 實例繼承72/38function Cat(name) var instance = new Animal(); = name | Tom; return instance;/ Test Codevar cat = new Cat();console.log();console.log(cat.sleep();co
41、nsole.log(cat instanceof Animal); / trueconsole.log(cat instanceof Cat); / false實現(xiàn)繼承3. 實例繼承不限制調(diào)用方式,不管是new 子類()還是子類(),返回的對象具有相同的效果實例是父類的實例,不是子類的實例不支持多繼承73/38實現(xiàn)繼承4. 拷貝繼承74/38function Cat(name) var animal = new Animal(); for(var p in animal) Ctotypep = animalp; C = name | Tom;/ Test Codevar cat = new Cat();console.log();console.log(cat.sleep();console.log(cat instanceof Animal); / falseconsole.log(cat instanceof Cat); / true實現(xiàn)繼承4. 拷貝繼承支持多繼承效率較低,內(nèi)存占用高(因為要拷貝父類的屬性)無法獲取父類不可枚舉的方法(不可枚舉方法,不能使用for in 訪問到)75/38實現(xiàn)繼承5.組合繼承76/38function Cat(name) An
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省徐州市鼓樓區(qū)東苑中學(xué) 2024-2025學(xué)年八年級3月月考道德與法治試題(原卷版+解析版)
- 教科版六年級科學(xué)上冊教學(xué)計劃(含進(jìn)度表)
- 關(guān)于電子報刊制作的一些個人看法
- 2025年黨政領(lǐng)導(dǎo)干部黨章黨規(guī)黨紀(jì)黨史知識培訓(xùn)考試題庫及答案(共220題)
- 未開窗通風(fēng)檢討書
- 別墅裝修合同專用版
- 項目執(zhí)行過程及成效分析
- 云計算數(shù)據(jù)中心能耗優(yōu)化方案
- 高效率辦公流程優(yōu)化解決方案
- 停車場智能管理系統(tǒng)安裝
- protocompiler_user_guide英文原版教程
- 石油鉆井過程主要危險井噴失控火災(zāi)爆炸事故樹分析
- 文件材料歸檔(移交)清單
- 注塑正交試驗(DOE)案例表
- 漯河市物業(yè)服務(wù)收費管理辦法
- 2022年湖南(土建)二級造價師考試題庫匯總(含基礎(chǔ)和實務(wù))
- 人教版新課標(biāo)六年級數(shù)學(xué)下冊(4~6單元)重點知識歸納
- (完整版)Brownbear繪本
- 高支模工程專項施工方案(專家論證)(完整版)
- 標(biāo)準(zhǔn)電極電勢表(非常全)
- 駕駛員技師論文
評論
0/150
提交評論