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 | 必填项。 对象。 |
| property | 必填。 属性名称。 |
| descriptor | 必填。 要添加或更改的属性的描述: value: value writable : true|false enumerable : true|false configurable : true|false get : function set : function |
返回值
| 类型 | 描述 |
| Object | 已更改的传递对象。 |
更多示例
示例
// 创建一个对象:
const person = {
firstName: "John",
lastName : "Doe",
language : "NO",
};
// 更改属性:
Object.defineProperty(person, "language", {
value: "EN",
writable : true,
enumerable : true,
configurable : true
});
// Enumerate Properties
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
});
// Enumerate Properties
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", {
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 非常适合创建计数器:
示例
// 定义设置器和获取器
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() 是 ECMAScript 5 (ES5 2009) 的一项特性。
JavaScript 2009 自 2013 年 7 月起,所有浏览器均已支持 JavaScript 2009。
| Chrome 23 |
IE/Edge 11 |
Firefox 21 |
Safari 6 |
Opera 15 |
| 2012年9月 | 2012年9月 | 2013年4月 | 2012年7月 | 2013年7月 |
