js對象幾種方法

javaScript中定義了兩種不一樣的屬性:數據屬性和訪問器屬性。數據屬性通常用於存儲數據數值,而訪問器屬性通常用於get/set操做,不能直接存儲數據數值在ES5中,咱們爲了描述屬性(property)的各類特徵,定義了特性(attribute)。在JavaScript中不能直接訪問特性,咱們把它放在兩對方括號中,html

數據屬性 java

訪問器屬性bash

defineProperty

ECMAScript 5 的 Object.defineProperty()方法。這個方法 接收三個參數:屬性所在的對象、屬性的名字和一個描述符對象。其中,描述符(descriptor)對象的屬 性必須是:configurable、enumerable、writable 和 value。設置其中的一或多個值,能夠修改 對應的特性值。例如:函數

var person = {};
Object.defineProperty(person, "name", {
    writable: false,
    value: "Nicholas"
});
alert(person.name); //"Nicholas" 
person.name = "Greg"; 
alert(person.name); //"Nicholas"
複製代碼

在調用 Object.defineProperty()方法時,若是不指定,configurable、enumerable 和 writable 特性的默認值都是 false。多數狀況下,可能都沒有必要利用 Object.defineProperty() 方法提供的這些高級功能ui

var book = {
    _year: 2004,
edition: 1 };
Object.defineProperty(book, "year", {
    get: function(){
        return this._year;
    },
    set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
} }
});
book.year = 2005; 
alert(book.edition); //2
複製代碼

以上代碼建立了一個 book 對象,並給它定義兩個默認的屬性:_year 和 edition。_year 前面 的下劃線是一種經常使用的記號,用於表示只能經過對象方法訪問的屬性。而訪問器屬性 year 則包含一個 getter 函數和一個 setter 函數。getter 函數返回_year 的值,setter 函數經過計算來肯定正確的版本。所以, 把 year 屬性修改成 2005 會致使_year 變成 2005,而 edition 變爲 2。這是使用訪問器屬性的常見方 式,即設置一個屬性的值會致使其餘屬性發生變化。this

不必定非要同時指定 getter 和 setter。只指定 getter 意味着屬性是不能寫,嘗試寫入屬性會被忽略。 在嚴格模式下,嘗試寫入只指定了 getter 函數的屬性會拋出錯誤。相似地,只指定 setter 函數的屬性也 不能讀,不然在非嚴格模式下會返回 undefined,而在嚴格模式下會拋出錯誤。spa

object.defineProperties

利用這個方法能夠經過描述符一次定義多個屬性。這個方法接收兩個對象參數:第一 個對象是要添加和修改其屬性的對象,第二個對象的屬性與第一個對象中要添加或修改的屬性一一對 應。例如:code

var book = {};
    Object.defineProperties(book, {
        _year: {
            value: 2004
        },
        edition: {
            value: 1
},
        year: {
            get: function(){
               return this._year;
    },
    set: function(newValue){
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue - 2004;
        }
} }
})
複製代碼

Object.getOwnPropertyDescriptor()

能夠取得給定屬性的描述 符。這個方法接收兩個參數:屬性所在的對象和要讀取其描述符的屬性名稱。返回值是一個對象,若是 是訪問器屬性,這個對象的屬性有 configurable、enumerable、get 和 set;若是是數據屬性,這 個對象的屬性有 configurable、enumerable、writable 和 value。例如:cdn

var descriptor = Object.getOwnPropertyDescriptor(book, "_year");
alert(descriptor.value); //2004
alert(descriptor.configurable); //false 
alert(typeof descriptor.get); //"undefined"
複製代碼

var descriptor = Object.getOwnPropertyDescriptor(book, "year"); alert(descriptor.value); //undefined alert(descriptor.enumerable); //false
alert(typeof descriptor.get); //"function"

複製代碼

建立對象的幾種方法

跳轉連接htm

相關文章
相關標籤/搜索