1. Object 對象類型
對象是 JavaScript 中一組屬性和方法的無序集嗓袱。
對象一般是針對一功能載體的描述掏秩。比如:狗對象却音、貓對象除呵。狗對象:擁有常見 age吼渡、name宋彼、color酷誓、type
屬性赫悄,還有奔跑 run()等行為原献。
JavaScript 中的對象是動態(tài)的馏慨,可以隨時添加屬性和刪除屬性。
除了字符串姑隅、數(shù)值類型写隶、布爾類型、null讲仰、undefined 之外的都是對象類型慕趴。對象是引用類型
2 Object 對象創(chuàng)建方式
Object 類型是我們用的最多的引用類型,我們接觸到的大部分都是 Object 類型的實例鄙陡。
創(chuàng)建 Object 類型實例的方法:
第一種:new 運算符創(chuàng)建對象
var a = new Object();//new 運算符冕房,創(chuàng)建一個 Object 對象。
a.age = 18;
a.name = "itt";
第二種:對象字面量
var a = {
name : "itct",
show : "http://www.ss.cn"
};
a.age = 19;
參考代碼:
// 創(chuàng)建 Object 對象的兩種方式
// 第一種:使用 new 操作符創(chuàng)建對象趁矾。
var t = new Object(); // 創(chuàng)建了一個 Object 對象 t耙册。
// new: 會創(chuàng)建一個對象,然后對象執(zhí)行 Object 函數(shù)愈魏。最后返回一個
對象實例
// js 是一個動態(tài)語言觅玻,可以隨時添加屬性和方法。
t.age = 19; // 年齡 19
t.name = 'jeck'; // 名字
t.run = function () { // 匿名函數(shù)
console.log('奔跑的方法...');
};
t["demo"] = "demo2";
// 對象怎么使用自己的屬性和方法培漏?
// 第一種方式:使用點的方式溪厘。
console.log(t.age); // => 19
// 第二種方式:使用中括號的方式。
console.log(t['name']); // => ject
字面量創(chuàng)建對象的方式
// 創(chuàng)建對象的第二種方式:字面量的方式
// 也稱為使用 JSON 對象的方式牌柄。
var t = { // 創(chuàng)建一個對象 t
age: 19,
name: 'laoma',
run: function() {
console.log('老馬跑路了畸悬!');
}
};
t.color = 'yellow';
console.log(t.age);
t.run(); // 執(zhí)行 t 對象中的 run 方法。如果一個對象的屬性是函數(shù)珊佣,我們就稱為方法蹋宦。
t.age = 10;
console.log(t.age);
3 引用類型
引用類型是 JavaScript 中復(fù)雜類型,是一種數(shù)據(jù)結(jié)構(gòu)咒锻。
JavaScrip 中所有的東西都是對象冷冗。
object 就是最長用的引用類型
引用類型在內(nèi)存中模型:
棧內(nèi)存
堆內(nèi)存
簡單類型只存儲在棧上(boolean、number)
.4 刪除屬性
JavaScript 的對象非常靈活惑艇,可以隨時刪除屬性蒿辙。
刪除屬性的運算符是 delete 關(guān)鍵字
語法結(jié)構(gòu):
delete object.property
delete object['property']
注意以下幾點:
? delete 操作符會從某個對象上移除指定屬性。成功刪除的時候回返回 true滨巴,否則返回false思灌。
? 如果你刪除的屬性在對象上不存在,那么 delete 將不會起作用恭取,但仍會返回 true
? 如果 delete 操作符刪除成功泰偿,則被刪除的屬性將從所屬的對象上徹底消失。
? 任何使用 var 聲明的屬性不能從全局作用域或函數(shù)的作用域中刪除蜈垮。
? 除了在全局作用域中的函數(shù)不能被刪除耗跛,在對象(object)中的函數(shù)是能夠用 delete 操作刪除的裕照。
var t = {}; // t= new Object();
t.age = 19; // 添加一個屬性 age
console.log(t.age); // => 19
// 通過 delete 操作符 刪除屬性
delete t.age; // 刪除 t 的自定義 age 屬性。
// debugger t["age"];
console.log(t.age); // => undefined
// 通過 in 運算符 可以檢測屬性是否屬于對象的自定義屬性,返回的結(jié)果是 true 或者 false
t.name = '123';
console.log('name' in t); // => true
delete t['name']; // 刪除了自定義屬性
console.log('name' in t); // => false
5 檢測屬性
JavaScript 的對象檢測屬性用 in 運算符
var t = {};
t.age = 19;
‘a(chǎn)ge’ in t; // =>true
delete t.age;
‘a(chǎn)ge’ in t; // =>false
6 枚舉自定義屬性
JavaScript 的對象可以使用 for in 循環(huán)遍歷對象中的所有屬性课兄。
var t = {};
t.age = 20;
for(var i in t) { console.log(i);}
會把繼承的屬性也會遍歷到牍氛。
7 對象的原型
每個對象都有自己的私有原型對象(除了 null)
每個對象都會從自己的私有原型對象上繼承原型的方法和屬性,可以直接對象可以直接使用烟阐。
對象調(diào)用一個屬性或者方法的時候先搜索自己的屬性和方法,如果沒有那么就去搜索原型上的屬性和方法紊扬,
如果有就直接使用蜒茄,如果沒有就直接拋出錯誤。
對象的私有原型都是通過__proto__聯(lián)系在一塊餐屎,注意這不是一個標(biāo)準(zhǔn)的屬性檀葛,但是所有瀏覽器都實現(xiàn)了這
個屬性。
構(gòu)造函數(shù)就是構(gòu)造對象的時候執(zhí)行的函數(shù)腹缩。比如:Object
對象的原型可以通過它的構(gòu)造函數(shù)的.prototype 獲的屿聋。
8 Object 對象原型的方法
toString()轉(zhuǎn)換成字符串
toLocalString() 轉(zhuǎn)換成本地化對應(yīng)的字符串
valueOf() 獲取它的值。
hasOwnProperty() 判斷屬性是否是自己創(chuàng)建添加的藏鹊。
9 對象練習(xí)
1.封裝一個貓對象润讥。貓擁有:顏色、重量盘寡、名字楚殿、ID 等屬性,還擁有跑竿痰、跳脆粥、叫等行為。并調(diào)用貓貓的
跑方法影涉。
//1变隔、 封裝一個貓對象。貓擁有:顏色蟹倾、重量匣缘、名字、ID 等屬性喊式,還擁有跑孵户、 跳、叫等行為岔留。并調(diào)用貓
貓的跑方法夏哭。
// var cat = new Object();
var cat = {
color: 'red',
weight: 20,
name: 'kimi',
ID: 1234,
run: function() {
// this 就相當(dāng)于 cat 對象。在對象的方法中使用 this 代表當(dāng)前的對象献联。
console.log(this.name + ' 奔跑方法');
},
jump: function() {
}
};
cat.run();
2.輸出貓貓的所有的自定義屬性的名稱
// 輸出貓所有的自定義屬性
for(var k in cat) {
console.log(k);
}
3.封裝一個數(shù)學(xué)對象竖配,對象中包括:Pi 屬性何址,獲取 1-n 的和的方法,獲取 n 的階乘的方法进胯。
// 3用爪、封裝一個數(shù)學(xué)對象,對象中包括:Pi 屬性胁镐,獲取 1-n 的和的方法偎血,獲取n 的階乘的方法。
var myMath = {
PI: 3.1415926,
sum: function(n) {
var result = 0;
// 實現(xiàn) 1 到 n 的和
for(var i = 1; i <= n; i++) {
result += i;
}
return result;
},
factorial: function(n) {
// 求 1 到 n 的階乘
var result = 1;
for(var i = 1; i<=n; i++) {
result *= i;
}
return result;
}
};
console.log(myMath.PI);
console.log(myMath.sum(100));
console.log(myMath.factorial(10));