更新時(shí)間:2023-05-05 來(lái)源:黑馬程序員 瀏覽量:
Object.defineProperty 是 JavaScript 中用于定義或修改對(duì)象屬性的方法。它接受三個(gè)參數(shù),分別是:
要定義或修改屬性的對(duì)象。
要定義或修改的屬性名稱。
一個(gè)包含屬性特性的對(duì)象。
屬性描述符對(duì)象 (descriptor) 可以包含以下可選屬性:
·value: 屬性的值。
·writable: 如果為 true,屬性的值可以被賦值運(yùn)算符改變。默認(rèn)為 false。
·enumerable: 如果為 true,屬性可以通過(guò) for...in 循環(huán)或 Object.keys 枚舉。默認(rèn)為 false。
·configurable: 如果為 true,屬性可以被刪除,以及屬性的特性可以被修改。默認(rèn)為 false。
·get: 作為屬性的 getter 函數(shù),當(dāng)訪問(wèn)屬性時(shí)會(huì)調(diào)用該函數(shù)。
·set: 作為屬性的 setter 函數(shù),當(dāng)設(shè)置屬性值時(shí)會(huì)調(diào)用該函數(shù)。
以下是使用 Object.defineProperty 的示例:
const obj = {}; // 定義一個(gè)可寫(xiě)的屬性 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
通過(guò)Object.defineProperty,我們可以靈活地定義和修改對(duì)象的屬性,并指定屬性的特性。