1.原型補充

原型鏈:是一種關(guān)系,實例對象var p1=new Person();和原型對象person.prototype之間的關(guān)系,關(guān)系是通過原型(proto)來聯(lián)系的
實例對象的原型proto和構(gòu)造函數(shù)的原型prototype指向是相同的
實例對象中的proto原型指向的是構(gòu)造函數(shù)中的原型prototype
實例對象中proto是原型,瀏覽器使用的
構(gòu)造函數(shù)中的prototype是原型,程序員使用的
原型指向可以改變
? ?實例對象的原型proto指向的是該對象所在的構(gòu)造函數(shù)的原型對象? 構(gòu)造函數(shù)的原型對象(prototype)指向如果改? ? ? 變了,實例對象的原型(proto)指向也會發(fā)生改變
? 實例對象和原型對象之間的關(guān)系是通過proto原型來聯(lián)系起來的,這個關(guān)系就是原型鏈
? 如果原型指向改變了,那么就應(yīng)該在原型改變指向之后添加原型方法
原型指向Object.prototype
? ? //實例對象中有proto原型? ? //構(gòu)造函數(shù)中有prototype原型? ? //prototype是對象
? ? //實例對象中的proto指向的是構(gòu)造函數(shù)的prototype
? ? //所以,prototype這個對象中也有proto,指向了Object.prototype
2.繼承
概念:首先繼承是一種關(guān)系,類(class)與類之間的關(guān)系,JS中沒有類,但是可以通過構(gòu)造函數(shù)模擬類,然后通過原型來實現(xiàn)繼承 繼承也是為了數(shù)據(jù)共享,js中的繼承也是為了實現(xiàn)數(shù)據(jù)共享
原型繼承
通過Student.prototype=new Person()改變學(xué)生得原型指向來實現(xiàn)繼承Person的屬性和方法
缺點:屬性值都一樣,代碼重復(fù)

借用構(gòu)造函數(shù)繼承
借用構(gòu)造函數(shù):構(gòu)造函數(shù)名字.call(當前對象,屬性,屬性,屬性....);解決了屬性繼承,并且值不重復(fù)的問題
缺陷:父級類別中的方法不能繼承

組合繼承
原型+借用構(gòu)造函數(shù)繼承。解決了兩種模式的缺點

拷貝繼承
?拷貝繼承:就是把對象中需要共享的屬性或者犯法,直接遍歷的方式復(fù)制到另一個對象中

3.高級函數(shù)
函數(shù)聲明與函數(shù)表達式的區(qū)別:
函數(shù)聲明必須有名字
函數(shù)聲明會函數(shù)提升,在預(yù)解析階段就已創(chuàng)建,聲明前后都可以調(diào)用
函數(shù)表達式類似于變量賦值
函數(shù)表達式可以沒有名字,例如匿名函數(shù)
函數(shù)表達式?jīng)]有變量提升,在執(zhí)行階段創(chuàng)建,必須在表達式執(zhí)行之后才可以調(diào)用
函數(shù)的調(diào)用方式:

this的指向問題

apply &? call


bind
//bind方法是復(fù)制的意思,參數(shù)可以在復(fù)制的時候傳進去,也可以在復(fù)制之后調(diào)用的時候傳入進去 //apply和call是調(diào)用的時候改變this指向? ? ? ? //bind方法,是賦值一份的時候,改變了this的指向
? ? * 函數(shù)名字.bind(對象,參數(shù)1,參數(shù)2,...);---->返回值是復(fù)制之后的這個函數(shù)
? ? * 方法名字.bind(對象,參數(shù)1,參數(shù)2,...);---->返回值是復(fù)制之后的這個方法
函數(shù)閉包
閉包的概念:函數(shù)A中,有一個函數(shù)B,函數(shù)B中可以訪問函數(shù)A中定義的變量或者是數(shù)據(jù),此時形成了閉包
? ? * 閉包的模式:函數(shù)模式的閉包,對象模式的閉包
? ? * 閉包的作用:緩存數(shù)據(jù),延長作用域鏈
? ? * 閉包的優(yōu)點和缺點:緩存數(shù)據(jù)

4.正則表達式
菜鳥教程在線正則表達測試:https://c.runoob.com/front-end/854
元字符串
? ? ?* . 表示的是:除了\n以外的任意的一個字符 "fdsfs238"
? ? * [] 表示的是:范圍,? [0-9] 表示的是0到9之間的任意的一個數(shù)字,? "789" [0-9]
? ? * [1-7] 表示的是1到7之間的任意的一個數(shù)字
? ? * [a-z] 表示的是:所有的小寫的字母中的任意的一個
? ? * [A-Z] 表示的是:所有的大寫的字母中的任意的一個
? ? * [a-zA-Z] 表示的是:所有的字母的任意的一個
? ? * [0-9a-zA-Z] 表示的是: 所有的數(shù)字或者是字母中的一個(非特殊符號)
? ? * [] 另一個函數(shù): 把正則表達式中元字符的意義干掉? ? [.] 就是一個.
? ? * | 或? [0-9]|[a-z] 表示的是要么是一個數(shù)字,要么是一個小寫的字母
? ? * () 分組 提升優(yōu)先級? [0-9]|([a-z])|[A-Z]
? ? * ([0-9])([1-5])([a-z]) 三組, 從最左邊開始計算
? ? * (()(()))從最左邊開始計算
? ? * 都是元字符,但是也可以叫限定符,下面的這些
? ? *? ? *? 表示的是:前面的表達式出現(xiàn)了0次到多次
? ? *? ? [a-z][0-9]* 小寫字母中的任意一個 后面是要么是沒有數(shù)字的,要么是多個數(shù)字的
? ? *? ? "fdsfs3223323"? [a-z][0-9]*
? ? *
? ? *? ? +? 表示的是:前面的表達式出現(xiàn)了1次到多次
? ? *? ? [a-z][9]+? 小寫字母一個后面最少一個9,或者多個9
? ? *? ? "fesfewww9fefds"
? ? *
? ? *? ? ?? 表示的是:前面的表達式出現(xiàn)了0次到1次,最少是0次,最多1次 ,另一個含義:阻止貪婪模式
? ? *? ? [4][a-z]? "1231234ij"
? ? *? 限定符:限定前面的表達式出現(xiàn)的次數(shù)
? ? *? {} 更加的明確前面的表達式出現(xiàn)的次數(shù)
? ? *? {0,} 表示的是前面的表達式出現(xiàn)了0次到多次,和 *一樣的
? ? *? {1,} 表示的是前面的表達式出現(xiàn)了1次到多次,和 +一樣的
? ? *? {0,1} 表示的是前面的表達式出現(xiàn)了0次到1次,和 ?一樣的
? ? *? {5,10} 表示的是前面的表達式出現(xiàn)了5次到10次
? ? *? {4} 前面的表達式出現(xiàn)了4次
? ? *? ^ 表示的是以什么開始,或者是取非(取反) ^[0-9] 以數(shù)字開頭
? ? *? ^[a-z] 以小寫字母開始
? ? *? [^0-9] 取反,非數(shù)字
? ? *? [^a-z] 非小寫字母
? ? *? [^0-9a-zA-Z_]
? ? *? $ 表示的是以什么結(jié)束? [0-9][a-z]$? 必須以小寫字母結(jié)束
? ? *? ^[0-9][a-z] 相當于是嚴格模式? "3f2432e"? "4f"
? ? *? \d 數(shù)字中的任意一個,
? ? *? \D 非數(shù)字中的一個
? ? *? \s 空白符中的一個
? ? *? \S 非空白符
? ? *? \w 非特殊符號[^a-z0-9A-Z]
? ? *? \W 特殊符號
? ? *? ? . 除了\n以外的任意一個單個字符
? ? *? ? []? 范圍
? ? *? ? () 分組,提升優(yōu)先級
? ? *? ? | 或者
? ? *? ? * 0-多次
? ? *? ? + 1-多次
? ? *? ? ? 0-1次
? ? *? ? {0,} 和*一樣
? ? *? ? {1,} 和+
? ? *? ? {0,1} 和?
? ? *
? ? *? ? \d 數(shù)字中的一個
? ? *? ? \D 非數(shù)字
? ? *? ? \s 空白符
? ? *? ? \S 非空白符
? ? *? ? \W? 特殊符號
? ? *? ? \w 非特殊符號 _
? ? *? ? ^ 取反,以什么開始
? ? *? ? $ 以什么結(jié)束
案例

參數(shù)

正則匹配
// 匹配日期
var dateStr = '2015-10-10';
var reg = /^\d{4}-\d{1,2}-\d{1,2}$/
console.log(reg.test(dateStr));
偽數(shù)組
擁有 length 屬性,其它屬性(索引)為非負整數(shù)(對象中的索引會被當做字符串來處理,這里你可以當做是個非負整數(shù)串來理解)
不具有數(shù)組所具有的方法
后記
基礎(chǔ)過完了,寫項目!!!Vue,小程序搞起來