創(chuàng)建對象的三種方法:
字面量 obj = {}、obj = new Object()、構(gòu)造函數(shù)
字面量方法創(chuàng)建對象:
- 屬性和方法采用鍵值對的方式;
- 多個屬性與方法之間用逗號隔開;
- 方法后跟匿名函數(shù);
let obj ={
uname:'Jack',
age:28,
sayHi:function(){
console.log('Hi!');
}
}
使用對象
- 調(diào)用對象的屬性: 對象.屬性 或者 對象['屬性'];
- 調(diào)用對象的方法: 對象.方法();
// 接上面代碼
console.log(obj.uname); // Jack
console.log(obj['age']); // 28
obj.sayHi(); // Hi!
new Object() 創(chuàng)建對象
- 用new Object()創(chuàng)建空對象;
- 使用“=”賦值來添加屬性和方法 ;
- 屬性和方法之間是單獨(dú)的語句,用分號結(jié)束
let obj = new Object();
obj.uname = 'Tom';
obj.age = 36;
obj.sayHi = function(){
console.log('Hi~');
}
console.log(obj.uname); // Tom
console.log(obj['age']); // 36
obj.sayHi(); // Hi~
使用構(gòu)造函數(shù)創(chuàng)建對象
- 上面兩種方法一次都只能創(chuàng)建一個對象,使用構(gòu)造函數(shù)可以創(chuàng)建多個對象;
- 把對象中的公共屬性和方法抽取出來,封裝在函數(shù)中,這個函數(shù)就是構(gòu)造函數(shù);
- 用構(gòu)造函數(shù)創(chuàng)建的對象,也被稱為對象的實例化;
代碼實例:
function Star(uname, age, gender) {
this.uname = uname;
this.age = age;
this.gender = gender;
this.sayHi = function(msg){
console.log('Hi~'+msg)
}
}
let p1 = new Star('Jack', 28, 'male');
let p2 = new Star('Lily', 23, 'female');
console.log(p1.uname); // Jack
console.log(p1['age']); // 28
console.log(p2.gender); // female
p1.sayHi('how are you!'); // HI~ how are you!
構(gòu)造函數(shù)的特點(diǎn)
- 構(gòu)造函數(shù)的名字,首字母要大寫;
- 構(gòu)造函數(shù)不需要 return , 就可以返回結(jié)果;
- 調(diào)用構(gòu)造函數(shù),使用new;
- 構(gòu)造函數(shù)的屬性和方法要使用this, 指向當(dāng)前對象;
new 關(guān)鍵字的執(zhí)行過程
- 變量遇到new, 即在內(nèi)在中創(chuàng)建了空對象;
- 構(gòu)造函數(shù)中的 this,就指向了這個空對象;
- 執(zhí)行構(gòu)造函數(shù)中的代碼,為對象添加屬性和方法;
- 返回這個對象,有了new,就不需要return了。
for ... in 遍歷對象
- 遍歷的變量常用 k 或 key;
- key 是變量,得到的是屬性名;
- obj[key] 得到屬性值;
let obj = {
uname: 'Jack',
age: 28,
gender: 'male',
sayHi: function() {
console.log('Hi~');
}
}
for (let key in obj) {
console.log(key + ':' + obj[key]);
}
小結(jié)
- 對象讓代碼結(jié)構(gòu)更清晰;
- 對象是復(fù)雜數(shù)據(jù)類型object;
- 本質(zhì):對象是一組無序的屬性和方法的集合;
- 構(gòu)造函數(shù)泛指一個大類;比如:明星;
- 對象是構(gòu)造函數(shù)的實例,特指某個具體的事物;比如:劉德華;
- for ... in 用于遍歷對象的屬性;