JS面向?qū)ο笕腴T
1、面向?qū)ο笳Z言概念
面向?qū)ο笳Z言主要包括 類、對象、封裝、多肽。
2、面向?qū)ο蟮木幊趟枷?br>
面向過程思想:關(guān)注解決問題的步驟 按步驟執(zhí)行
優(yōu)點:開發(fā)成本低。
缺點:不適合大型項目。
面向?qū)ο笏枷耄宏P(guān)注解決問題所需要的對象,然后根據(jù)業(yè)務邏輯按一定的規(guī)則調(diào)用這些對象的相關(guān)功能
(想看對象有哪些功能進行封裝——在按邏輯思路走)
優(yōu)點有效的彌補面向過程思想的不足。
3、js里的面向?qū)ο?br>
1> 對象分為系統(tǒng)對象和自定義對象兩種。我們可以通過調(diào)用系統(tǒng)構(gòu)造函數(shù)來創(chuàng)建出系統(tǒng)對象,
如:array\date等。自定義對象必須自己創(chuàng)造,無法利用系統(tǒng)函數(shù)來創(chuàng)造。
// new + 構(gòu)造函數(shù)
var arr1 = new Array();
// 字面量
var arr2 = [1, 2, 3];
var obj1 = new Object();
2>創(chuàng)建JS對象_直接創(chuàng)建
// 1、創(chuàng)建一個空對象
var per1 = new Object();
// 2、把該對象所需要的屬性、方法添加進去
per1.name = "曹勇";
console.log(per1.name);
per1.gender = "男";
// 給新對象添加方法(函數(shù) )
per1.manager = function () {
alert("保持安靜");
};
per1.name = "西門大官人";
per1.age = 12;
console.log(per1.age);
刪除對象中的屬性:delete+對象屬性名
delete per1.age;
console.log(per1.age);
對象名.方法名():調(diào)用對象下的方法。
per1.manager(); :
如何區(qū)分:函數(shù)\方法?當函數(shù)屬于一個對象時,該函數(shù)就是這個對象下的一個方法,通過方法名來調(diào)用該函數(shù)
如何區(qū)分:變量\屬性?當變量屬于某一個對象時,該變量就是這個對象下的一個方法,通過屬性名來調(diào)用該變量
// 把per1對象交給per2,這樣per2就和per1一致
var per2 = per1;
console.log(per2.name);
console.log(per2.age);
per2.name = "張倩";
console.log("修改后的p2name屬性"+per2.name);
// 因為per2和per1所指向的是同一塊內(nèi)存,所以per2修改了這塊內(nèi)存的值,per1再來訪問時,就會獲取到新的值
console.log("per1的name屬性值" + per1.name);
// 創(chuàng)建第二個per對象
var per3= new Object();
per3.name = "老宋";
per3.age = 24;
per3.gender = "男";
per3.hobby = "女";
// 我們可以通過.(點語法)來訪問對象屬性
per3.name;
// 我們也可以通過[]來訪問對象的屬性:方括號中必須是屬性字符串或保存屬性字符串的變量
// 一般在遍歷對象的屬性時才會使用[]這種方法
console.log(per3["name"]);
// 遍歷對象屬性:for...in...
for (var property(財產(chǎn)) in per3) {
console.log( property + "=" + per3[property]);
}
var arr = [1, 3, 2, 5];
for (var index in arr) {
arr[index];
}
3>創(chuàng)建JS對象_字面量創(chuàng)建
// 使用字面量創(chuàng)建對象
var per1 = {
name: "張三",//name(屬性) 屬性與屬性值之間用分隔符 隔開: 屬性與屬性之間 逗號隔開,
age: 12,
hobby: "打球",
sayHi: function () {
alert("你好");
}
}
console.log(per1.name);
per1.sayHi();
4>創(chuàng)建JS對象_構(gòu)造函數(shù)創(chuàng)建(工廠模式)
使用構(gòu)造函數(shù)創(chuàng)建對象
優(yōu)勢:
創(chuàng)造多個對象時代碼量比較少
劣勢:
1、內(nèi)存空間浪費嚴重;
2、無法通過代碼獲取到創(chuàng)建出來的對象和構(gòu)造函數(shù)之間的關(guān)系。
// 1、定義構(gòu)造函數(shù)(首字母必須大寫)
function CreatPerson (name, age) {
// 1.1、 創(chuàng)建一個新的空對象
var person = new Object();
// 1.2、給空對象添加屬性和方法
person.name = name;
person.age = age;
person.sayHi = function () {
return name + age;
};
// 1.3、把創(chuàng)建好的對象返回出去
return person;
}
// 2、調(diào)用構(gòu)造函數(shù)創(chuàng)建對象
var per1 = CreatPerson("張三", 23);
console.log(per1.name);
per1.sayHi();
var per2 = CreatPerson("李四", 56);
// 通過instanceof可以判斷出該對象是否是通過某個函數(shù)創(chuàng)建出來的。
// 返回值為false,說明系統(tǒng)無法判斷通過這種方法創(chuàng)造出來的對象和構(gòu)造函數(shù)之間的關(guān)系
console.log(per2 instanceof CreatPerson);
console.log(per2.name);
// 使用new+構(gòu)造函數(shù)方法創(chuàng)建出來的對象可以確定對象是否是通過某個函數(shù)創(chuàng)建出來的
var arr = new Array();
// 返回true
console.log(arr instanceof Array);