在 JavaScript 中,Object.defineProperties() 方法主要用来直接在一个 对象 上定义新的 属性 或修改现有属性,并返回该对象。
Object.defineProperties(obj, props);
参数 | 描述 |
---|---|
obj | 在其上定义或修改属性的对象。 |
props | 要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:数据描述符和访问器描述符。 |
属性 | 说明 |
---|---|
configurable | true 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。默认为 false。 |
enumerable | true 当且仅当在枚举相应对象上的属性时该属性显现。默认为 false。 |
value | 与属性关联的值。可以是任何有效的 JavaScript 值(数字,对象,函数等)。默认为 undefined。 |
writable | true 当且仅当与该属性相关联的值可以用 assignment operator 改变时。默认为 false。 |
get | 作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。默认为 undefined。 |
set | 作为属性的 setter 函数,如果没有 setter 则为 undefined。函数将仅接受参数赋值给该属性的新值。默认为 undefined。 |
传递给函数的对象。
Object.defineProperties 本质上定义了 obj 对象上 props 的可枚举属性相对应的所有属性。
使用 Object.defineProperties 定义对象属性
<!DOCTYPE html>
<html>
<head>
<title>JavaScript Object.defineProperties()</title>
<script type="text/javascript">
console.log("嗨客网(www.haicoder.net)");
var person = new Object();
Object.defineProperties(person, {
name: {
value: 'HaiCoder',
configurable: false,
writable: true,
enumerable: true
},
age: {
value: 18,
writable: false,
configurable: true
}
})
console.log("Name =", person.name, "Age =", person.age);
person.name = 'haicoder';
person.age = 20;
console.log("Change age to 20, Name =", person.name, "Age =", person.age);
</script>
</head>
</html>
程序运行后,控制台输出如下:
我们首先创建了一个 person 对象,该对象有两个属性,即 name 和 age,同时,我们使用 defineProperties 修饰了这两个属性,设置了 name 属性的值并且可写属性,设置了 age 属性的值和可写属性。
最后,我们修改了 name 和 age 属性,我们发现,name 属性已经被成功修改,age 属性没有被修改成功,因为,我们使用了 defineProperties 方法设置了 age 属性为不可修改,即 writable 为 false。
在 JavaScript 中,Object.defineProperties() 方法主要用来直接在一个对象上定义新的属性或修改现有属性,并返回该对象。