DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> js面向對象 – 對象、對象屬性
js面向對象 – 對象、對象屬性
編輯:JavaScript基礎知識     
創建javascript對象可以通過兩種方式:創建Object對象和創建字面量對象。

/**
* 面向對象
*/

/** 創建對象 **/
var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "Soft Engineer";

person.sayName = function() {
console.log(this.name);
};

/** 字面量方式 **/
var person1 = {
name: "Nicholas",
age: 29,
job: "Soft Engineer",

sayName: function() {
console.log(this.name);
}
};



Javascript 對象屬性的特性

對象的屬性特性,可以通過Object.defineProperty(object, property, descritor)設置:

configurable ,屬性是否可配置。可配置的含義包括:是否可以刪除屬性( delete ),是否可以修改屬性的 writable 、enumerable 、 configurable 屬性。
enumerable ,屬性是否可枚舉。可枚舉的含義包括:是否可以通過 for...in 遍歷到,是否可以通過 Object.keys() 方法獲取屬性名稱。
writable ,屬性是否可重寫。可重寫的含義包括:是否可以對屬性進行重新賦值。
value ,屬性的默認值。
使用Object.defineProperty方法定義configurable、 enumerable、 writable 特性時,沒有指定的特性默認是false



//"use strict"; //嚴格模式
/**
* 面向對象 - 對象屬性的數據屬性
* 數據屬性包含一個數據值的位置,在這個位置可以讀取和寫入值,數據屬性4個特性: Configurable, Enumerable, Writable, Value 。
* Configurableb 表示是否能修改屬性的其它特性,或使用delete刪除屬性,默認為true。
* Enumerable 是否能通過for in 循環列舉出對象的該屬性,默認true。
* Writable 能否修改屬性的值(也即是下面的Value值),默認true。
* Value 表示屬性的數據值,默認是undefined(未賦值)
*/

// 創建一個對象
var person = {
name: "Nicholas"
};

/**
* 上面創建了一個名稱為person的對象,屬性name的4個特性:Configurable(true),Enumerable(true), Writable(true), Value("Nicholas")。
*/

/**
* 修改屬性的默認特性,Object.defineProperty(obj, propertyName, descObj)
* 接受3個參數:屬性所在對象,屬性名,屬性特性描述符對象,如下
*/

Object.defineProperty(person, "name", {
writable: false, // 是否能修改name屬性,false 即是只讀狀態
value: "Nick"
});

console.log(person.name); //Nick

//屬性特性writable設置為false,這裡無法修改name屬性的值,嚴格模式下會拋出不會出現報錯。非嚴格模式會被忽略,name還是Nick。
person.name = "James"; // 設置無效

console.log(person.name); // Nick

Object.defineProperty(person, "name", {
writable: true
});

person.name = "James";
console.log(person.name); //James

/**
* configurable 一旦將屬性設置為false,將不能在設置為true
*/

Object.defineProperty(person, "name", {
configurable: false // 不能通過delete刪除屬性
});
// 拋出錯誤
/**
Object.defineProperty(person, "name", {
configurable: true
}); **/

delete person.name; // 非嚴格模式無效,嚴格模式拋錯
console.log("name = " + person.name);



set ,一旦屬性被重新賦值,此方法被自動調用。
get ,一旦屬性被訪問讀取,此方法被自動調用。


var book = {
_year: 2004,
edeition: 1
};

// 定義屬性year,用來訪問_year
Object.defineProperty(book, "year", {
get: function() {
console.log("execute get");
return this._year;
},
set: function(newValue) {
console.log("execute set");
if (newValue > 2004) {
this._year = newValue;
this.edeition += newValue - 2004;
}
}

});



對象的屬性特性:數值特性和訪問器特性。數值特性configurable、enumerable、writable、value,代表值和狀態。訪問器特性沒有值,只有一對方法get和set。
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved