建立javascript對象能夠經過兩種方式:建立Object對象和建立字面量對象。javascript
-
/**
-
* 面向對象
-
*/
-
-
/** 建立對象 **/
-
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 對象屬性的特性 java
對象的屬性特性,能夠經過Object.defineProperty(object, property, descritor)設置:this
-
//"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。對象