建立自定義對象最簡單的方式是建立一個Object的實例:函數
var person = new Object() person.name = 'adhehe' person.age = 23 person.job = '程序開發' person.getName = function(){ return this.name }
使用對面字面量建立一個普通對象實例:this
var person = { name:'adhehe', age:23, job:'程序開發', getName:function(){ return this.name } }
ECMAScript中有兩種屬性類型spa
數據屬性code
它包含一個數據值的位置,在這個位置能夠讀取和寫入值。對象
[[Configurable]]:blog
[[Enumerable]]:ip
[[Writable]]:開發
[[Value]]:get
要修改屬性默認的特性,必須使用 Object.defineProperty()方法:it
var person = {} Object.defineProperty(person,'name',{ configurable:false,
enumerable:true, writable:false, value:'adhehe' })
//一旦把屬性定義爲不可配置的,就不能再把它變回可配置了
//在調用此方法建立的新的屬性時,若是不指定,則configurable、enumerable、writable默認值都爲false
訪問器屬性
它不包含數據值,它包含一對getter函數和setter函數
[[Configurable]]:
[[Enumerable]]:
[[Get]]:
[[Set]]:
訪問器屬性不能直接定義,必須使用 Object.defineProperty()來定義。
var person = { name:'adhehe', _age:23 } Object.defineProperty(person,'age',{ get:function(){ return this._age; }, set:function(newVal){ if(newVal > 59){ this._age = 'old'; }else{
this._age = newVal;
} } }) person.age = 45; console.log(person.age)//輸出 45 person.age = 65; console.log(person.age)//輸出 old
Object.defineProperties()方法可一次定義多個屬性:
var person = {} Object.defineProperties(person,{ name:{ writable:true, value:'adhehe' }, _age:{ writable:true, value:23 }, age:{ get:function(){ return this._age; }, set:function(newVal){ if(newVal > 59){ this._age = 'old'; }else{ this._age = newVal; } } } })
Object.getOwnPropertyDescriptor()方法可取得給定屬性的描述符:
//之前面person爲例 var desc = Object.getOwnPropertyDescriptor(person,'name');
console.log(desc.value) //adhehe
console.log(desc.configurable) //false
console.log(desc.get) //undefined