面向?qū)ο螅海ㄈf物皆是對象。) js中每個對象都是一個自成一體的實體。內(nèi)部包含一個或多個 相關(guān)的變量和函數(shù)分別叫做屬性和方法。
引用類型: 數(shù)組 函數(shù) 對象 存儲的是 地址
基本數(shù)據(jù)類型:字符串 數(shù)值 Bool; 存儲的是值。
面向?qū)ο螅?br>
編程語言: 包含類和對象,三個特征: 封裝,多態(tài) ,繼承。
編程思想:構(gòu)造函數(shù)。(相當(dāng)于js中的類)
對象其實就是一種引用類型,而對象的值就是引用類型的實例,在js中引用類型是一種數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)和功能組織再一起,他常常被稱為類,而js中沒有類的概念,雖然js是一門面向?qū)ο蟮恼Z言,卻不具備傳統(tǒng)面向?qū)ο笳Z言所支持的類和接口等基本結(jié)構(gòu)。
(1)直接創(chuàng)建對象(包括增刪改查)
<script type="text/javascript">
//創(chuàng)建一個空對象
var per1 = new Object();
//把對象所需要的屬性或者方法添加進(jìn)去
per1.name = "女神";
per1.gender= "女"
console.log(per1.gender);
console.log(per1.name);
//給對象添加方法(函數(shù));
per1.manager = function(){ //對象下的方法。
//用匿名函數(shù) 調(diào)用的時候直接可以用自定義對象的方法即可。
alert("別說話,吻我");
}
per1.manager(); //調(diào)用對象下的方法
//刪除對象中的屬性:delete+對象的屬性名
delete per1.name;
console.log(per1.name); 得到的結(jié)果是undefined;
//函數(shù)/方法 當(dāng)函數(shù)屬于一個對象時,該函數(shù)就是這個對象下的一個方法,通過方法名來調(diào)用函數(shù)。
//屬性 /變量 當(dāng)變量屬于某一個屬性時,該變量就是這個對象下的一個方法,通過對象下的屬性名來調(diào)用變量。
console.log(person.name);
console.log(person.age);
person.manager();
//創(chuàng)建第二個對象
var per2 = new Object;
per2.name = "老宋"
per2.age = 24;
per2.gender = "男";
per2.hobby = "女";
// 通過.開訪問對象屬性
//還可以通過[]來訪問對象的屬性。 遍歷屬性時 使用。
console.log(per2["name"]); // []中必須是屬性字符串或者保存屬性字符串的變量
//遍歷對象的屬性 for...in.....獲取對象的屬性。
for(var property in per2){ //property:屬性名
}
</script>```
(2)JSON 法創(chuàng)建對象(使用字面量創(chuàng)建)
//使用字面量創(chuàng)建js對象
var person ={
name: "黃琴",
age: "18",
anager: function(){
console.log("別說話,吻我" );
}
}
for(var property in person){ // 遍歷每一個屬性
console.log(property+"="+person[property]);
}
</script>```
(3)工廠模式的方法創(chuàng)建對象
<script type="text/javascript">
//通過構(gòu)造函數(shù)創(chuàng)建js對象???
//1 創(chuàng)建出對象的構(gòu)造函數(shù) (定義構(gòu)造函數(shù))
function CreatPerson(name,age,hobby){
//1.1 創(chuàng)建一個新對象
//var person = new Object(); //new 構(gòu)造函數(shù)
var person = { //字面量創(chuàng)建
// 1.3 給新對象添加屬性和方法
name:name,
age: age,
hobby:hobby,
sayhi:function(){
alert('你好');
}
}
// 1.3把創(chuàng)建好的對象返回出去
return person;
}
// 2 調(diào)用函數(shù)
var per1 = CreatPerson("張三",23,"足球");
console.log(per1);
per1.sayhi();
var per2 = CreatPerson("李四",23,"籃球");
console.log(per2 instanceof CreatPerson); //檢測某個對象是不是另一個對象。 false
console.log(per2);
</script>
創(chuàng)建對象:
1.工廠模式:用函數(shù)來封裝以特定的接口創(chuàng)建對象的細(xì)節(jié)。
instanceof 檢測不出創(chuàng)建的對象是不是構(gòu)造函數(shù)的對象 返回值:false;不是構(gòu)造函數(shù)創(chuàng)建出來的對象
缺點:沒有解決對象識別的問題,
(最好運用傳參的方式)
調(diào)用函數(shù)的時候傳遞參數(shù)。
2.new+構(gòu)造函數(shù)模式:(構(gòu)造函數(shù)始終都是應(yīng)該以一個大寫字母開頭,而非構(gòu)造函數(shù)則應(yīng)該以一個小寫字母為開頭。)
構(gòu)造函數(shù)創(chuàng)建的步驟。
創(chuàng)建一個新的對象,
將構(gòu)造函數(shù)的作用域賦給新對象(因此this就指向了這個新對象)
為這個新對象添加屬性。
返回新的對象。instanceof 可以檢測出對象的類型; 如果是對象返回值為true;不是對象返回值為false;
構(gòu)造函數(shù)和工廠模式不同:
沒有顯示的創(chuàng)建對象;
直接降屬性和方法賦給了this對象。
沒有return語句。
構(gòu)造函數(shù)始終都是應(yīng)該以一個大寫字母開頭,而非構(gòu)造函數(shù)則應(yīng)該以一個小寫字母為開頭。