首頁(yè)常見問題正文

Object.defineProperty怎么用, 有哪三個(gè)參數(shù)?作用分別是什么?

更新時(shí)間:2023-05-05 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  Object.defineProperty 是 JavaScript 中用于定義或修改對(duì)象屬性的方法。它接受三個(gè)參數(shù),分別是:

  1.對(duì)象 (obj)

  要定義或修改屬性的對(duì)象。

  2.屬性名稱 (prop)

  要定義或修改的屬性名稱。

  3.屬性描述符 (descriptor)

  一個(gè)包含屬性特性的對(duì)象。

  屬性描述符對(duì)象 (descriptor) 可以包含以下可選屬性:

  ·value: 屬性的值。

  ·writable: 如果為 true,屬性的值可以被賦值運(yùn)算符改變。默認(rèn)為 false。

  ·enumerable: 如果為 true,屬性可以通過 for...in 循環(huán)或 Object.keys 枚舉。默認(rèn)為 false。

  ·configurable: 如果為 true,屬性可以被刪除,以及屬性的特性可以被修改。默認(rèn)為 false。

  ·get: 作為屬性的 getter 函數(shù),當(dāng)訪問屬性時(shí)會(huì)調(diào)用該函數(shù)。

  ·set: 作為屬性的 setter 函數(shù),當(dāng)設(shè)置屬性值時(shí)會(huì)調(diào)用該函數(shù)。

  以下是使用 Object.defineProperty 的示例:

const obj = {};

// 定義一個(gè)可寫的屬性
Object.defineProperty(obj, 'name', {
  value: 'John',
  writable: true,
  enumerable: true,
  configurable: true
});

console.log(obj.name); // 輸出: John

obj.name = 'Jane';
console.log(obj.name); // 輸出: Jane

// 定義一個(gè)只讀的屬性
Object.defineProperty(obj, 'age', {
  value: 30,
  writable: false,
  enumerable: true,
  configurable: false
});

console.log(obj.age); // 輸出: 30

obj.age = 40; // 嘗試修改屬性值,但會(huì)被忽略
console.log(obj.age); // 輸出: 30

// 定義一個(gè)具有 getter 和 setter 的屬性
Object.defineProperty(obj, 'fullName', {
  get: function() {
    return this.name + ' Doe';
  },
  set: function(value) {
    const parts = value.split(' ');
    this.name = parts[0];
  },
  enumerable: true,
  configurable: true
});

console.log(obj.fullName); // 輸出: John Doe

obj.fullName = 'Jane Smith';
console.log(obj.name); // 輸出: Jane
console.log(obj.fullName); // 輸出: Jane Doe

  通過Object.defineProperty,我們可以靈活地定義和修改對(duì)象的屬性,并指定屬性的特性。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!