Object.defineProperties
Object.defineProperties
在一个对象上定义一个(多个)新的属性或修改原有属性,修改后的目标对象obj。
语法: Object.defineProperties (obj, props)
obj: 将要被添加属性或修改属性的对象
props: 该对象的一个(多个)键值对 定义了将要为对象添加或修改的属性的具体配置
var obj={firstName:"zhang",lastName:'san'};
var obj1=Object.defineProperties(obj,{fullName:{
//设置内部属性相关特性
//configurable:true,
get:function(){
return this.firstName+this.lastName;
},set:function(data){
str=data.split(" ")
this.firstName=str[0];
this.lastName=str[1];
},
}});
obj.fullName="li si";
console.log("obj.fullName = ",obj.fullName);
console.log("obj = ",obj);
console.log("obj===obj1 为 ",obj===obj1);

在举例中 fullname 属于惰性求值。惰性求值 : 表达式不在它被绑定到变量之后就立即求值,而是在该值被取用的时候求值。
obj===obj1为true,表示 Object.defineProperties ()返回的不是一个新的对象,而是修改后的目标对象
介绍 Object.defineProperties中的第二个可选参数 props 的属性描述符以及相应的属性名称
//延续上个代码段
var d=Object.getOwnPropertyDescriptor(obj,"fullName");
console.log(d);
可以看到有4个描述内部属性的特性

-
[[Configurable]]
- 表示能否通过delete删除此属性,初始值为false,如果直接使用字面量定义对象,默认为true [[Enumerable]]
- 表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,初始值为false,如果直接使用字面量定义对象,默认为true [[Get]]
- 一个给属性提供 getter 的方法(访问对象属性时调用的函数,返回值就是当前属性的值),如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined [[Set]]
- 一个给属性提供 setter 的方法(给对象属性设置值时调用的函数),如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined
本文详细探讨了ES5中的Object.defineProperties方法,用于在对象上定义或修改属性。通过示例,解释了如何使用该方法,并特别强调了惰性求值的概念。此外,还介绍了props参数中的属性描述符,包括其内部特性。
1111

被折叠的 条评论
为什么被折叠?



