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