當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


JavaScript Object.defineProperty()用法及代碼示例


JavaScript Object.defineProperty() 方法添加或修改對象的現有屬性並返回該對象。

用法:

Object.defineProperty(obj, prop, descriptor)

defineProperty() 方法是靜態方法,使用Object 類名調用。

defineProperty()參數

defineProperty() 方法包含:

  • obj - 要在其上定義屬性的對象。
  • prop - 要定義或修改的屬性的名稱或 Symbol
  • descriptor - 正在定義或修改的屬性的說明符。

對象中存在的屬性說明符有兩種類型:數據說明符和訪問器說明符。它們可以具有以下可選屬性。

  • configurable
  • enumerable

數據說明符還可以具有:

  • value
  • writable

訪問器說明符還可以具有:

  • get
  • set

defineProperty() 的返回值

  • 返回傳遞給函數的對象。

注意:

  • 默認情況下,使用 Object.defineProperty() 添加的值是不可變的且不可枚舉的。
  • 如果說明符既沒有value , writable , get 也沒有set 鍵,則將其視為數據說明符。如果說明符同時具有 valuewritablegetset 鍵,則會引發異常。

示例:向對象添加數據屬性

let obj = {};

// with a data property descriptor
Object.defineProperty(obj, "property1", {
  value: 788,
  writable: true,
  enumerable: true,
  configurable: true,
});

console.log(obj.property1); // 788

// with an accessor property descriptor
Object.defineProperty(obj, "property2", {
  get() {
    console.log("Getting Value...");
    return val;
  },
  set(newVal) {
    console.log("Setting Value...");
    val = newVal;
  },
  enumerable: true,
  configurable: true,
});

obj.property2 = 6969; // Setting Value...

console.log(obj.property2); // 6969

輸出

788
Setting Value...
Getting Value...
6969

我們不能同時混合數據和訪問器屬性說明符,因為它會引發錯誤。

要修改屬性,對象的 writable 屬性必須是 true ,否則在嚴格模式下它不會修改並拋出錯誤。

enumerable 屬性屬性定義屬性是由 Object.assign() 還是由擴展運算符選取。

configurable 屬性同時控製是否可以從對象中刪除屬性以及是否可以更改其屬性(valuewritable 除外)。

相關用法


注:本文由純淨天空篩選整理自 Javascript Object.defineProperty()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。