更新时间:2023-05-05 来源:黑马程序员 浏览量:
Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的方法。它接受三个参数,分别是:
要定义或修改属性的对象。
要定义或修改的属性名称。
一个包含属性特性的对象。
属性描述符对象 (descriptor) 可以包含以下可选属性:
·value: 属性的值。
·writable: 如果为 true,属性的值可以被赋值运算符改变。默认为 false。
·enumerable: 如果为 true,属性可以通过 for...in 循环或 Object.keys 枚举。默认为 false。
·configurable: 如果为 true,属性可以被删除,以及属性的特性可以被修改。默认为 false。
·get: 作为属性的 getter 函数,当访问属性时会调用该函数。
·set: 作为属性的 setter 函数,当设置属性值时会调用该函数。
以下是使用 Object.defineProperty 的示例:
const obj = {}; // 定义一个可写的属性 Object.defineProperty(obj, 'name', { value: 'John', writable: true, enumerable: true, configurable: true }); console.log(obj.name); // 输出: John obj.name = 'Jane'; console.log(obj.name); // 输出: Jane // 定义一个只读的属性 Object.defineProperty(obj, 'age', { value: 30, writable: false, enumerable: true, configurable: false }); console.log(obj.age); // 输出: 30 obj.age = 40; // 尝试修改属性值,但会被忽略 console.log(obj.age); // 输出: 30 // 定义一个具有 getter 和 setter 的属性 Object.defineProperty(obj, 'fullName', { get: function() { return this.name + ' Doe'; }, set: function(value) { const parts = value.split(' '); this.name = parts[0]; }, enumerable: true, configurable: true }); console.log(obj.fullName); // 输出: John Doe obj.fullName = 'Jane Smith'; console.log(obj.name); // 输出: Jane console.log(obj.fullName); // 输出: Jane Doe
通过Object.defineProperty,我们可以灵活地定义和修改对象的属性,并指定属性的特性。