0.前言
以前和大家分享的都是JavaScript的基礎(chǔ),現(xiàn)在就和大家分享的是比較有難度的知識(shí)點(diǎn)——對(duì)象。注意啊各位廣大單身狗們,你們的福利來了,沒有對(duì)象的人,現(xiàn)在可以“new”出來一個(gè)了。嘻嘻(o)/~
1.面向?qū)ο缶幊趟枷牒喗?/h3>
不管是學(xué)習(xí)何種語言,都會(huì)學(xué)習(xí)到面向?qū)ο?,?dāng)然c語言是面向過程的,這無疑加大了程序員的工作量,而且不利于維護(hù)。但是面向?qū)ο螅瑒t顯得方便快捷,大大提高了程序員的工作效率。那么JavaScript的面向?qū)ο笥惺氯绾文??我們一起來了解一下?/p>
(1)什么是面向?qū)ο螅?/h5>
①把數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存的整體——對(duì)象。
②對(duì)同類對(duì)象抽象出其共性,形成類。
③類中的大多數(shù)數(shù)據(jù),只能用本類的方法進(jìn)行處理。
④類通過一個(gè)簡單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過消息進(jìn)行通信。
⑤程序流程由用戶在使用中決定。
(2)理解面向?qū)ο?/h5>
①面向?qū)ο笫窍鄬?duì)面向過程而言
②面向?qū)ο蠛兔嫦蜻^程都是一種思想
③面向過程
??強(qiáng)調(diào)的是功能行為
??關(guān)注的是解決問題需要哪些步驟
④面向?qū)ο?br>
??將功能封裝進(jìn)對(duì)象,強(qiáng)調(diào)具備了功能的對(duì)象
??關(guān)注的是解決問題需要哪些對(duì)象
⑤面向?qū)ο笫腔诿嫦蜻^程的。
(3)面向?qū)ο蟮乃拇筇匦?/h5>
①把數(shù)據(jù)及對(duì)數(shù)據(jù)的操作方法放在一起,作為一個(gè)相互依存的整體——對(duì)象。
②對(duì)同類對(duì)象抽象出其共性,形成類。
③類中的大多數(shù)數(shù)據(jù),只能用本類的方法進(jìn)行處理。
④類通過一個(gè)簡單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過消息進(jìn)行通信。
⑤程序流程由用戶在使用中決定。
①面向?qū)ο笫窍鄬?duì)面向過程而言
②面向?qū)ο蠛兔嫦蜻^程都是一種思想
③面向過程
??強(qiáng)調(diào)的是功能行為
??關(guān)注的是解決問題需要哪些步驟
④面向?qū)ο?br> ??將功能封裝進(jìn)對(duì)象,強(qiáng)調(diào)具備了功能的對(duì)象
??關(guān)注的是解決問題需要哪些對(duì)象
⑤面向?qū)ο笫腔诿嫦蜻^程的。
(3)面向?qū)ο蟮乃拇筇匦?/h5>
多態(tài)性、 繼承性、 抽象性、 封裝性
(4)軟件編程的實(shí)質(zhì)
軟件編程就是將我們的思維轉(zhuǎn)變成計(jì)算機(jī)能夠識(shí)別語言的一個(gè)過程。
注意:面試的過程可能會(huì)被提到哦?。?!
案例如圖
??從圖中我們可以看到,要實(shí)現(xiàn)把大象關(guān)冰箱用面向過程和面向?qū)ο?/strong>兩種思想的事項(xiàng)方法。
面向過程:如果用面向過程的方法實(shí)現(xiàn)的話,就是“自己”,注意是“自己”去把冰箱門打開,然后“自己”把大象裝進(jìn)冰箱,最后還是“自己”把把冰箱門關(guān)上。從始至終都是自己一個(gè)完成的。
面向?qū)ο螅?/strong>就是“自己”去找一個(gè)人,注意是“去找一個(gè)人”讓它去把冰箱門打開、把大象裝進(jìn)冰箱、把冰箱門關(guān)上。從始至終都是“自己”去命令別人去做的,自己沒有動(dòng)手完成。至于這個(gè)人是怎么完成的我們不用去關(guān)心,只要你能找到能把大象關(guān)進(jìn)冰箱的這個(gè)人就行了。這就是面向?qū)ο蟮乃枷搿?br> 可以總結(jié)出:面向過程時(shí)“自己”是執(zhí)行者,面向?qū)ο髸r(shí)“自己”是指揮者。
(5)面向的對(duì)象的特點(diǎn)
①是一種符合人們思考習(xí)慣的思想
②可以將復(fù)雜的事情簡單化
③將程序員從執(zhí)行者轉(zhuǎn)換成了指揮者
④完成需求時(shí):
??先要去找具有所需的功能的對(duì)象來用。
??如果該對(duì)象不存在,那么創(chuàng)建一個(gè)具有所需功能的對(duì)象。
(6)JS中的面向?qū)ο螅ㄖ攸c(diǎn))
(1)Javascript是一種基于對(duì)象(object-based)的語言,你遇到的所有東西幾乎都是對(duì)象。但是,它又不是一種真正的面向?qū)ο缶幊蹋∣OP)語言,因?yàn)樗恼Z法中沒有class(類),注意是基于對(duì)象的語言,是一種弱類型語言
(2)對(duì)象:屬性與方法的集合
2.字面量方式創(chuàng)建對(duì)象并訪問屬性和方法
屬性:是一個(gè)字符串。
方法:是一個(gè)功能或者方法或者函數(shù)。
(1)字面量法創(chuàng)建對(duì)象,空對(duì)象
var obj1 = {};
console.log(obj1);
console.log(typeof obj1);
結(jié)果:
(2)字面量法創(chuàng)建對(duì)象,非空對(duì)象
var girlFriend = {
//添加屬性
//冒號(hào)左側(cè)是屬性名 冒號(hào)右側(cè)是對(duì)應(yīng)的屬性值
name: "鐵錘妹妹",
// "name": "二雷",
// 'name': "二雷",
// 以上寫法都是可以的,一般我們不建議給屬性名加引號(hào)。但是以下幾種情況必須加引號(hào)
// 1、當(dāng)屬性名是JS中的保留字時(shí)必須加引號(hào)
// 2、當(dāng)屬性名中存在空格或者其他特殊字符串時(shí)必須加引號(hào)
// 3、當(dāng)屬性民以數(shù)字開頭時(shí)必須加引號(hào)
// "good man": 100,
// "%^&!": "no zuo no die",
// "1abc": "sha",
height: 165,
weight:55,
age: 25,
//行為
eat: function(){
console.log("吃");
},
run: function(){
console.log("跑");
},
//帶參數(shù)行為
sleep: function(hours) {
console.log("睡" + hours + "個(gè)小時(shí)");
},
//
say: function(){
console.log("身高:" + girlFriend.height);
//在對(duì)象內(nèi)部,this代表當(dāng)前對(duì)象本身
console.log("年齡:" + this.age);
},
};
結(jié)果:
(3)訪問對(duì)象的屬性(屬性值)
公式一:對(duì)象名["屬性名"]
console.log(girlFriend["name"]);
結(jié)果:
公式二:對(duì)象名 . 屬性名,也叫點(diǎn)語法
console.log(girlFriend.height);
結(jié)果:
(4)修改屬性值
girlFriend.weight = 180;
console.log(girlFriend);
結(jié)果:
(5)訪問功能(函數(shù))
公式一:對(duì)象名["功能屬性名"](參數(shù)列表)
girlFriend["eat"]();
公式二:對(duì)象名 . 功能屬性名(參數(shù)列表)
girlFriend.run();
girlFriend.sleep(10);
girlFriend.say();
(6)動(dòng)態(tài)給對(duì)象添加屬性
注意:后期添加的屬性,在這之前使用該對(duì)象也會(huì)有當(dāng)前添加的屬性
girlFriend.faceValue = 100;
console.log(girlFriend);
結(jié)果:
(7)動(dòng)態(tài)給對(duì)象添加方法
girlFriend.play = function(){
console.log("玩");
};
girlFriend.play();
(8)動(dòng)態(tài)刪除對(duì)象屬性
delete girlFriend.weight;
console.log(girlFriend.weight);
結(jié)果:
(9)動(dòng)態(tài)刪除對(duì)象行為
delete girlFriend.eat;
girlFriend.eat();
結(jié)果:
因?yàn)閯h除了eat()函數(shù),所以才會(huì)報(bào)錯(cuò),提示eat不是一個(gè)函數(shù)。
3.總結(jié)
今天就先介紹這一種方法吧,累死我了,本人已“事”,有事燒紙?。。?!