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
鍵,則將其視為數據說明符。如果說明符同時具有value
或writable
和get
或set
鍵,則會引發異常。
示例:向對象添加數據屬性
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
屬性同時控製是否可以從對象中刪除屬性以及是否可以更改其屬性(value
和 writable
除外)。
相關用法
- JavaScript Object.defineProperties()用法及代碼示例
- JavaScript Object.isPrototypeOf()用法及代碼示例
- JavaScript Object.assign()用法及代碼示例
- JavaScript Object.isExtensible()用法及代碼示例
- JavaScript Object.getPrototypeOf()用法及代碼示例
- JavaScript Object.isFrozen()用法及代碼示例
- JavaScript Object.seal()用法及代碼示例
- JavaScript Object.getOwnPropertyDescriptors()用法及代碼示例
- JavaScript Object.setPrototypeOf()用法及代碼示例
- JavaScript Object.getOwnPropertySymbols()用法及代碼示例
- JavaScript Object.freeze()用法及代碼示例
- JavaScript Object.preventExtensions()用法及代碼示例
- JavaScript Object.is()用法及代碼示例
- JavaScript Object.fromEntries()用法及代碼示例
- JavaScript Object.getOwnPropertyDescriptor()用法及代碼示例
- JavaScript Object.getOwnPropertyNames()用法及代碼示例
- JavaScript Object.propertyIsEnumerable()用法及代碼示例
- JavaScript Object.keys()用法及代碼示例
- JavaScript Object.values()用法及代碼示例
- JavaScript Object.create()用法及代碼示例
注:本文由純淨天空篩選整理自 Javascript Object.defineProperty()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。