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 月 |