Object.defineProperties()

admin發表於2018-09-18

Object.defineProperty方法一次只能為物件新增或者修改一個屬性。

在實際應用中,可能需要進行批量操作,Object.defineProperties可以實現。

使用方法基本與Object.defineProperty方法相同。

關於Object.defineProperty可以參閱Object.defineProperty()一章節。

更多Object物件內容參閱JavaScript Object 物件一章節。

ES5新增此方法。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
object.defineProperties(object, descriptors)

引數解析:

(1).object:必需,要新增或者修改屬性的物件。

(2).descriptors:必需,一個物件直接量,用來設定資料屬性或訪問器屬性的特性,與Object.defineProperty方法不同的是,它既可以設定或者修改一個屬性,也可以是多個屬性。

特別說明:此方法的返回值是就是傳遞給此方法的object物件。

關於資料屬性或者訪問器屬性可以參閱如下兩篇文章:

(1).資料屬性參閱configurable、enumerable和writable一章節。

(2).訪問器屬性參閱JavaScript get與set訪問器屬性一章節。

瀏覽器支援:

(1).IE9+瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).opera瀏覽器支援此方法。

(6).safria瀏覽器支援此方法。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let obj = {
  webName:"螞蟻部落",
  url:"softwhy.com"
};
   
Object.defineProperties(obj,{
  address:{
     value:"青島市南區",
     writable:true,
     numerable:true,
     configurable:true
  },
  age:{
    value:2,
    writable:true,
    numerable:true,
    configurable:true
  }
});
console.log(obj.address);
console.log(obj.age);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/18/103502pnnmmrntrocrc52d.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面的程式碼可以為obj物件新增address和age屬性。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let obj = {
  webName:"螞蟻部落",
  url:"softwhy.com"
};
   
Object.defineProperties(obj,{
  address:{
     value:"青島市南區",
     writable:true,
     numerable:true,
     configurable:true
  },
  age:{
    set:function(x){
      this._age=x;
    },
    get:function(){
      return "螞蟻部落已經建立"+this._age+"年了";
    },
    enumerable:true,
    configurable:true
  }
});
obj.age=3;
console.log(obj.age);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/18/103537eafffbt9ricv2fb9.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

為obj物件新增address和age屬性,並且為age屬性設定get和set屬性訪問器。