JavaScript Object.defineProperty()
示例
新增屬性
// 建立一個物件
const person = {
firstName: "John",
lastName: "Doe",
language: "EN"
};
// 新增一個新屬性
Object.defineProperty(person, "year", {value:"2008"})
自己動手試一試 »
更改屬性
// 建立一個物件
const person = {
firstName: "John",
lastName: "Doe",
language: "EN"
};
// 更改屬性
Object.defineProperty(person, "language", {value:"NO"})
自己動手試一試 »
更多示例見下!
描述
Object.defineProperty()
方法新增或更改物件屬性。
Object.defineProperty()
方法允許您更改屬性元資料。
Object.defineProperty()
方法允許您新增 getter 和 setter。
請參閱下面的更多示例。
相關方法
Object.defineProperty() 新增或更改單個屬性。
Object.defineProperties() 新增或更改多個屬性。
Object.getOwnPropertyNames() 返回物件的屬性名稱。
Object.getOwnPropertyDescriptor() 返回屬性的描述符。
Object.getOwnPropertyDescriptors() 返回所有屬性的描述符。
語法
Object.defineProperty(object, property, descriptor)
引數
引數 | 描述 |
object | 必需。 該物件。 |
object | 必需。 屬性名稱。 |
descriptor | 必需。 要新增或更改的屬性描述符 value: 值 writable : true|false enumerable : true|false configurable : true|false get : 函式 set : 函式 |
返回值
型別 | 描述 |
物件 | 已進行更改的已傳遞物件。 |
更多示例
示例
// 建立一個物件
const person = {
firstName: "John",
lastName : "Doe",
language : "NO",
};
// 更改屬性
Object.defineProperty(person, "language", {
value: "EN",
writable : true,
enumerable : true,
configurable : true
});
// 列舉屬性
let txt = "";
for (let x in person) {
txt += person[x] + "<br>";
}
// 顯示屬性
document.getElementById("demo").innerHTML = txt;
自己動手試一試 »
下一個示例是相同的程式碼,但它隱藏了列舉中的語言屬性
示例
// 建立一個物件
const person = {
firstName: "John",
lastName : "Doe",
language : "NO",
};
// 更改屬性
Object.defineProperty(person, "language", {
value: "EN",
writable : true,
enumerable : false,
configurable : true
});
// 列舉屬性
let txt = "";
for (let x in person) {
txt += person[x] + "<br>";
}
document.getElementById("demo").innerHTML = txt;
自己動手試一試 »
Setters 和 Getters
此示例建立一個 setter 和一個 getter 來確保語言的更新為大寫
示例
// 建立一個物件
const person = {
firstName: "John",
lastName : "Doe",
language : "NO"
};
// 更改屬性
Object.defineProperty(person, "language", {
get : function() { return language },
set : function(value) { language = value.toUpperCase()}
});
// 更改語言
person.language = "en";
// 顯示語言
document.getElementById("demo").innerHTML = person.language;
自己動手試一試 »
此示例使用 getter 連線名和姓
示例
// 建立一個物件
const person = {
firstName: "John",
lastName : "Doe"
};
// 定義 Getter
Object.defineProperty(person, "fullName", {
get: function () {return this.firstName + " " + this.lastName;}
});
自己動手試一試 »
JavaScript Getter 和 Setter 非常適合建立計數器
示例
// 定義 Setters 和 Getters
Object.defineProperty(obj, "reset", {
get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
set : function (value) {this.counter -= value;}
});
自己動手試一試 »
瀏覽器支援
Object.defineProperty()
是 ECMAScript5 (ES5) 功能。
自 2013 年 7 月以來,所有現代瀏覽器都完全支援 ES5 (JavaScript 2009)
Chrome 23 |
IE/Edge 11 |
Firefox 21 |
Safari 6 |
Opera 15 |
2012 年 9 月 | 2012 年 9 月 | 2013 年 4 月 | 2012 年 7 月 | 2013 年 7 月 |