­

# JavaScript 對象

JavaScript 對象

對象

在JavaScript中,對象是一組無序的相關屬性方法的集合,所有的事物都是對象,例如字元串、數值、數組、函數等。
對象是由屬性方法組成的。

  • 屬性:事物的特徵,在對象中用屬性來表示(常用名詞)
  • 方法:事物的行為,在對象中用方法來表示(常用動詞)

保存一個值時,可以使用變數,保存多個值(一組值)時,可以使用數組,保存一個人的完整資訊時可使用對象。

創建對象(object)的三種方式

1.利用字面量創建對象
對象字面量就是花括弧{ }裡面包含了表達這個具體事物(對象)的屬性和方法。

  • 鍵:相當於屬性名
  • 值:相當於屬性值,可以是任意類型的值(數字類型、字元類型、布爾類型、函數類型)

對象的調用

  • 對象裡面的屬性調用:對象名.屬性名 ,這個小點,可理解為「的」
  • 對象裡面屬性的另一種調用方式:對象名[‘屬性名’],注意方括弧裡面的屬性必須加引號
  • 對象裡面的方法調用:對象名.方法名(),注意方法名字後面一定加括弧
//1.利用字面量創建對象{ }
//var obj = { };創建了一個空的對象
var obj = {          
    // { }裡面的屬性或者方法採取鍵值對的形式 鍵(屬性名):值(屬性值)
	name: '張三',
	age: '18',     // 多個屬性或者方法之間用逗號隔開
	sex: '男',
	sayHi: function(){ // 方法後面跟的是一個匿名函數
		console.log('hi~');
	}
}
//使用對象
// 調用對象的屬性
console.log(obj.name); // 第一種方法  對象名.屬性名
console.log(obj['age']); // 第二種方法  對象名['屬性名']
obj.sayHi(); // 第三種方法  調用對象的方法 sayHi 對象名.方法名() 需要添加小括弧

2.利用new Object 創建對象

//利用new Object 創建對象
var obj = new Object(); // 創建了一個空對象
obj.name = '張三';
obj.age = 18;    // 利用等號 = 賦值的方法,添加對象的屬性和方法
obj.sex = '男';	// 每個屬性和方法之間用 分號 結束
obj.sayHi = function(){
	console.log('hi~');
}
console.log(obj.name);
console.log(obj['sex']);
obj.sayHi();

3.利用構造函數創建對象
因為前面兩種創建對象的方式一次只能創建一個對象,一次創建一個對象,裡面有很多的屬性和方法是大量相同的,因此可以利用函數的方法,重複這些相同程式碼,我們將這個函數稱為 ——構造函數 ,這個函數裡面封裝的不是普通的程式碼,而是對象。

構造函數就是把對象裡面一些相同的屬性和方法抽象出來封裝到函數裡面。

//語法格式
//function 構造函數名(){
//	this.屬性 = 值;
//	this.方法 = function() { }
//}
//new 構造函數名();

// 構造函數 明星 泛指的某一大類 類似於java語言中的 類(class)
function Star(uname, age, sex){  // 構造函數首字母要大寫
	this.name = uname;
	this.age = age;
	this.sex = sex;
	this.sing = function(sang) { // 屬性和方法前面必須添加 this
		consloe.log(sang);
	}
}

// 調用構造函數必須使用 new
// 對象 特指是一個具體的事物 劉德華 == {name: "劉德華", age:18, sex:"男", sing:f}
var ldh = new Star('劉德華'18,'男'); // 調用函數返回的是一個對象
console.log(ldh.name);
console.log(ldh['sex']);
ldh.sing('忘情水');

var zxy = new Star('張學友',28,'男');
console.log(zxy.name);
console.log(zxy.age);
zxy.sing('吻別');

對象的實例化利用構造函數創建對象的過程

new關鍵字

new在執行時會做的四件事情:
1.new的出現,會讓構造函數在記憶體中創建一個新的空對象
2.this就是指向這個新的對象
3.執行構造函數裡面的程式碼,給空對象添加屬性和方法
4.返回這個新對象(所以構造函數裡面不需要return)

遍歷對象屬性(for in)

//遍歷對象
var obj ={
	name: '劉德華',
	age: 18',
	aex: '',
}
for(var k in obj){ // for in 裡面的變數通常寫 k 或者 key
	conlose.log(k); // k 變數 輸出 得到的是 屬性名(name age sex)
	conlose.log(obj[k]); // obj[k]得到的是屬性值(劉德華 18 男)
}