JavaScript高級

1 面向對象操作

- 回顧對象的基本概念

- 面向對象的相關概念

- 面向對象的特征和操作的實現方式

- 小練習

2 函數的相關內容

- 函數的屬性和方法

- 函數的其他使用方式

- 自調用函數

- 回調函數

- 閉包函數

- 遞歸函數

3 正則表達式

- 介紹:是一個用來操作字符串的工具(內置對象)

- 對象的創(chuàng)建方式

- 單個對象創(chuàng)建方式:{} new Object()

- 多個對象創(chuàng)建方式:

- 內置對象

- Array

- Date

- String

- 自定義構造函數

- 使用方式

- 命名規(guī)則:首字母大寫

- 調用規(guī)則:調用前必須設置new

- 內部操作:通過this給對象設置屬性或方法

- new的作用:

- 創(chuàng)建了一個對象

- 將對象返回

- 將this修改為這個對象

- 調用構造函數

- 推薦無論如何都要添加()

- this的使用:

- 全局作用域中:window對象,沒用

- 普通調用的函數中

- 默認this為window泽疆,也沒用

- 作為方法調用的函數中(使用最多的情況) (重要<俣帷!!)

- 默認this為當前對象(函數調用者)

- 構造函數中的this (固定用法)

- 被new設置為對象供汛,我們無法操作

- 對象的基本操作

- 分類:

JavaScript的數據類型分為2類

- 簡單類型(基本類型)

- string 字符串

- number 數值

- boolean 布爾

- null 空

- undefined 未定義

- 復雜類型

- Object

- Array

- Date

- Math

- String

- 自定義類型(自定義構造函數)

Js中只有對象一種復雜類型痢虹,因為內置功能很多,

根據具體的功能分類檐晕,有劃分為了多種類型

- 對象的使用分類:

- 數據存儲功能

- 數組: []

有序的數據存儲方式

- 對象: {}

無序的數據存儲方式

- 適用于數據需要進行單獨標識的場景

- 作為工具使用

- 見前面的復雜類型部分

- 對象的屬性操作

- 概念:對象是由屬性組成的,屬性由屬性名和屬性值組成

- 方法:方法也是屬性,只是保存了函數值辟灰,為了區(qū)分个榕,起了個新名字而已。

- 操作方式

- 對象.屬性名

- 對象['屬性名']

- 屬性名為字符串值芥喇,或通過變量保存時西采,必須使用這種方式

- 遍歷

- 遍歷方式: for..in

- 刪除方式:

delete 對象.屬性名; 刪除了屬性

// w3c標準和ECMA標準的關系?

// - ECMA標準:js基礎語法標準

// - w3c標準:html乃坤、css苛让、webAPI

*/

// 面向對象的概念:

// - 面向過程

// - 指的是在編程中,專注于實現功能的'過程'湿诊,專注于實現的具體的細節(jié)狱杰。

// - 例如:冒泡排序,需要考慮有幾個循環(huán)厅须,每個循環(huán)多少次仿畸,怎么比較和交換。朗和。

// - 面向對象(拿來主義)

// - 指的是在編程中错沽,考慮效果中需要使用哪幾部分功能,找到可以幫助我們實現功能的工具(對象)進行操作即可眶拉。

// - 例如:操作中需要對某個數組排序千埃,找到數組的sort方法,直接排序后進行后續(xù)操作即可忆植。

// 能不能說面向對象操作比面向過程好呢放可?

// - 不是一個層面的考慮方式,無法直接比較朝刊。

// - 例如:我們使用sort是一種面向對象的操作形式耀里,但是sort功能在實現時也是通過面向過程來操作的。

// - 我們可以將兩個部分的關系理解為:面向對象是基于面向過程的拾氓。

/*

var arr = [5, 2, 3, 1];

arr.sort();

console.log(arr); */

// 吃飯: 自己做飯(面向過程)冯挎、 去飯館吃飯(面向對象)

// 回憶以前我們做過的操作屬于哪種使用方式:

// - 面向過程:以前的大部分代碼都是面向過程的

// - 面向對象:內置對象操作,jQuery

// 面向對象操作的3個特征:

// - 封裝:指的是對象的封裝

// - 以前的封裝是函數封裝咙鞍,現在的封裝是對象的封裝房官,

// 其實就是基于函數封裝操作,將功能分類后保存到對象中進行使用续滋。

// - 繼承:

// - 為了實現更好的功能復用(jack和jack爸爸的例子)

// - 多態(tài):

// - 一個功能被不同對象操作時易阳,操作效果不同

// 將math相關的功能保存到obj中,就實現了基本函數封裝的對象封裝操作

/* var obj = {

mathFun1 : function () {

// 求和功能

},

mathFun2 : function () {

// 計算差功能

},

mathFun3 : function () {

// 計算乘法功能

}

}; */

/* function CreateObj (name, age) {

this.name = name;

this.age = age;

this.sayHi = function () {

console.log('你好,我的名字是' + this.name);

};

} */

// 通過new的方式可以創(chuàng)建具有構造函數中功能的對象

// 我們將這種對象稱為'實例對象'

/* var c1 = new CreateObj('jack', 18);

var c2 = new CreateObj('rose', 21); */

// 通過觀察我們發(fā)現c1和c2兩個實例對象的屬性值不同吃粒,很正常

// c1和c2的sayHi方法值相同不?

// console.log(c1, c2);

/* console.log(c1.sayHi);

console.log(c2.sayHi); */

// 通過觀察我們發(fā)現c1和c2的sayHi方法值長得一樣拒课,但推測不是同一個函數

// - 可以通過==或===進行比較

// - 注:對復雜類型進行==或===比較時徐勃,必須是同一個值才能返回true

/* console.log(c1.sayHi == c2.sayHi); // false事示,說明不是同一個函數

console.log(c1.sayHi === c2.sayHi); // false,說明不是同一個函數 */

// 出現的問題:函數的作用是重用僻肖,操作時不應當設置多個相同功能的函數

// 解決方式:將方法值設置為命名函數統(tǒng)一保存肖爵,讓功能可以重用

vartemp= {

sayHi:function() {

console.log('你好,我的名字是'+this.name);

},

sayHehe:function() {

console.log('你好,我的名字是'+this.name);

}

};

functionCreateObj(name,age) {

this.name=name;

this.age=age;

// 將sayHi函數體設置給this.sayHi

this.sayHi=temp.sayHi;

this.sayHehe=temp.sayHehe;

}

varc1=newCreateObj('jack',18);

varc2=newCreateObj('rose',21);

// 檢測后:c1和c2的sayHi是用一個函數,達到了改進的目的

console.log(c1.sayHi===c2.sayHi);// true

// 新的問題:

// - 為了優(yōu)化構造函數臀脏,設置了命名函數保存劝堪,這些函數被自動設置為window的方法

// - window的方法變多了,導致執(zhí)行速度變慢..

// - 任意的一個對象揉稚,屬性越多秒啦,訪問的速度越慢

// 解決方式:

// - 設置一個臨時的對象,用來統(tǒng)一保存構造函數中的方法值

// prototype 原型

// - 任意函數都自帶prototype屬性

// prototype的值搀玖,默認就是一個對象余境,就是用來保存構造函數中的方法使用的灌诅。

functionCreateObj(name) {

this.name=name;

this.age=18;

this.hobbies= ['吃','喝'];

// 之前的方法設置方式:

/*

this.sayHi = function () {

console.log('你好,我的名字是' + this.name);

};

this.sayHehe = function () {

console.log('呵呵呵');

};

*/

}

// console.log(CreateObj.prototype);

// 以后的方法設置方式:

// - 考慮某個函數中的this時猜拾,一定先考慮函數是如何執(zhí)行的

CreateObj.prototype.sayHi=function() {

console.log('你好,我的名字是'+this.name);

};

CreateObj.prototype.sayHehe=function() {

console.log('呵呵呵');

};

varc1=newCreateObj('jack',18);

varc2=newCreateObj('rose',21);

c1.sayHi();// c1在調用sayHi方法挎袜,sayHi中的this就是c1

c2.sayHi();// c2在調用sayHi方法,sayHi中的this就是c2

// console.log(c1.sayHi === c2.sayHi); // true

// 小結論:

// 將方法設置給prototype后宋雏,實例對象可以直接使用,也是統(tǒng)一保存的方法值

// - 以后設置方法時磨总,統(tǒng)一設置給 構造函數.prototype 即可

// 對象屬性的基本查找方式:

// - 1 查找對象自身,如果存在蚪燕,就使用

// - 2 如果沒有對應功能娶牌,在查找__proto__馆纳,也就是構造函數的原型

// - 如果原型中存在對應功能诗良,也可以使用

// 從語法角度觀察,Array是構造函數鲁驶,arr就是實例對象

vararr=newArray(1,2,3,4,5);// 相當于[1, 2, 3, 4, 5]

arr.push(8);

console.log(arr);

// 通過觀察arr鉴裹,我們發(fā)現內置對象設置方法時,采用的方式與我們相同,都是設置在了prototype中

// 如果我們希望給內置構造函數Array增加方法径荔,設置在Array.prototype中即可

// 例如:設置一個用于數組求和的方法

/* function getSum (arr) {

var sum = 0;

for (var i = 0; i < arr.length; i++) {

sum += arr[i];

}

return sum;

}

console.log(getSum(arr)); */

// 將getSum設置為數組的方法督禽,任意數組均可使用

Array.prototype.getSum=function() {

varsum=0;

for(vari=0;i<this.length;i++) {

sum+=this[i];

}

returnsum;

};

console.log(arr.getSum() );

// 我們自己書寫的代碼可以在控制臺輸出查看

// 例如: console.log(arr.getSum);

// 內置的功能無法查看代碼,查看結果為 ? push() { [native code] }

// 例如: console.log(arr.push);

// 實際使用方式:

// - 這個屬性是給示例對象訪問的总处,用來確定實例對象是通過哪個構造函數創(chuàng)建的狈惫。

// - 功能作用:類型檢測操作

// typeof 只能檢測除null的簡單類型和function

// instanceof

// - 以后希望確定當前對象的類型時,檢測constructor即可鹦马,比instanceof好用一些

// - constructor的作用非常單純胧谈,就是用來檢測類型,確定了類型就確定了功能

// 作用域鏈回顧:

// - 作用:用來描述變量名/函數名的查找方式

// - 沿作用域鏈查找

// - 查找的最終位置:全局作用域

// 原型鏈:

// - 原型鏈是由一個或多個原型組成的結構荸频。

// - 作用:用來描述對象屬性的查找方式

// - 查找方式:沿原型鏈查找

// - 查找的最終位置:Object.prototype

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末菱肖,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子试溯,更是在濱河造成了極大的恐慌蔑滓,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遇绞,死亡現場離奇詭異键袱,居然都是意外死亡,警方通過查閱死者的電腦和手機摹闽,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門蹄咖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人付鹿,你說我怎么就攤上這事澜汤。” “怎么了舵匾?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵俊抵,是天一觀的道長。 經常有香客問我坐梯,道長徽诲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任吵血,我火速辦了婚禮谎替,結果婚禮上,老公的妹妹穿的比我還像新娘蹋辅。我一直安慰自己钱贯,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布秩命。 她就那樣靜靜地躺著,像睡著了一般硫麻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天浇辜,我揣著相機與錄音柳洋,去河邊找鬼叹坦。 笑死,一個胖子當著我的面吹牛绪囱,可吹牛的內容都是我干的莹捡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼齿椅,長吁一口氣:“原來是場噩夢啊……” “哼涣脚!你這毒婦竟也來了遣蚀?” 一聲冷哼從身側響起坠敷,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膝迎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后限次,有當地人在樹林里發(fā)現了一具尸體柴灯,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡赠群,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年查描,在試婚紗的時候發(fā)現自己被綠了柏卤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘缚。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窝爪,靈堂內的尸體忽然破棺而出齐媒,到底是詐尸還是另有隱情,我是刑警寧澤啃勉,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布淮阐,位于F島的核電站,受9級特大地震影響泣特,放射性物質發(fā)生泄漏挑随。R本人自食惡果不足惜兜挨,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望柒桑。 院中可真熱鬧噪舀,春花似錦飘诗、人聲如沸昆稿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岛抄。三九已至狈茉,卻和暖如春氯庆,著一層夾襖步出監(jiān)牢的瞬間扰付,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工实昨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荒给,地道東北人刁卜。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像挑辆,于是被迫代替她去往敵國和親鱼蝉。 傳聞我的和親對象是個殘疾皇子箫荡,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容