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"})
自己尝试一下 »
更多示例如下!
描述
The Object.defineProperty()
方法添加或更改对象属性。
The Object.defineProperty()
方法允许您更改属性元数据。
The Object.defineProperty()
方法允许您添加 getter 和 setter。
请参阅下面的更多示例。
相关方法
Object.defineProperty() 添加或更改一个属性。
Object.defineProperties() 添加或更改多个属性。
Object.getOwnPropertyNames() 返回对象的属性名称。
Object.getOwnPropertyDescriptor() 返回属性的描述符。
Object.getOwnPropertyDescriptors() 返回所有属性的描述符。
语法
Object.defineProperty(object, property, descriptor)
参数
参数 | 描述 |
object | 必需。 该对象。 |
object | 必需。 属性名称。 |
descriptor | 必需。 要添加或更改的属性的描述符 value: value writable : true|false enumerable : true|false configurable : true|false get : function set : function |
返回值
类型 | 描述 |
对象 | 传入的对象,其中包含所做的更改。 |
更多示例
示例
// 创建一个对象
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;
自己尝试一下 »
setter 和 getter
此示例创建一个 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 非常适合创建计数器。
示例
// 定义 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()
是 ECMAScript5 (ES5) 的功能。
ES5 (JavaScript 2009) 自 2013 年 7 月起在所有现代浏览器中得到完全支持
Chrome 23 |
IE/Edge 11 |
Firefox 21 |
Safari 6 |
Opera 15 |
2012 年 9 月 | 2012 年 9 月 | 2013 年 4 月 | 2012 年 7 月 | 2013 年 7 月 |