jinzhe

jinzhe

github
email

javascript中對象的屬性配置

數據屬性描述符#

  • value:值
  • writable:值是否可改寫
  • enumerable:是否可枚舉(forinObject.keys()
  • configurable:是否可配置(deletedefineProperty 是否可以設置成功)

注意
屬性描述符在單個屬性的級別上工作。

Object.getOwnPropertyDescriptor#

獲取數據屬性的描述符。

const user = {
  name: 'z',
  age: 23
}

const config = Object.getOwnPropertyDescriptor(user, 'name')

console.log(config)
// { value: 'z', writable: true, enumerable: true, configurable: true }

Object.defineProperty#

設置數據屬性的描述符。

const user = {
  name: 'z',
  age: 23
}

Object.defineProperty(user, 'name', {
  writable: false,
  enumerable: false,
  configurable: false
})

Object.defineProperties#

一次性設置對象多個數據屬性的描述符。

const user = {
  name: 'z',
  age: 23
}

Object.defineProperties(user, {
  name: {
    writable: false,
    enumerable: false,
    configurable: false
  },
  age:{
    writable: false,
    enumerable: false,
    configurable: false
  }
})

Object.getOwnPropertyDescriptors#

一次性獲取所有數據屬性描述符。

const user = {
  name: 'z',
  age: 23
}

const config = Object.getOwnPropertyDescriptors(user)
console.log(config)
// {
//    name: { value: 'z', writable: true, enumerable: true, configurable: true },
//    age: { value: 23, writable: true, enumerable: true, configurable: true }
//}

設定一個全局的密封對象#

Object.seal(obj)#

禁止添加 / 刪除屬性。為所有現有的屬性設置 configurable: false

Object.freeze(obj)#

禁止添加 / 刪除 / 更改屬性。為所有現有的屬性設置 configurable: false, writable: false

訪問器屬性#

本質上是用於獲取和設置值的函數,但從外部代碼來看就像常規屬性。

let obj = {
  get propName() {
    // 當讀取 obj.propName 時,getter 起作用
  },

  set propName(value) {
    // 當執行 obj.propName = value 操作時,setter 起作用
  }
};

getter 和 setter#

訪問器屬性由 “getter” 和 “setter” 方法表示。在對象字面量中,它們用 getset 表示:

let user = {
  name: "John",
  surname: "Smith",

  get fullName() {
    return `${this.name} ${this.surname}`;
  },

  set fullName(value) {
    [this.name, this.surname] = value.split(" ");
  }
};

// set fullName 將以給定值執行
user.fullName = "Alice Cooper";

console.log(user.fullName) // Alice Cooper
console.log(user.name); // Alice
console.log(user.surname); // Cooper

訪問器描述符#

  • get: 一個沒有參數的函數,在讀取屬性時工作
  • set: 一個帶有單個參數的函數,當寫入屬性時工作
  • enumerable:與數據屬性的相同,
  • configurable: 與數據屬性的相同,
let user = {
  name: "John",
  surname: "Smith"
};

Object.defineProperty(user, 'fullName', {
  get() {
    return `${this.name} ${this.surname}`;
  },
  enumerable: true,
  set(value) {
    [this.name, this.surname] = value.split(" ");
  }
});

console.log(user.fullName); // John Smith

for(let key in user) console.log(key); // name, surname, fullName
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。