Object.defineProperties

本文详细探讨了ES5中的Object.defineProperties方法,用于在对象上定义或修改属性。通过示例,解释了如何使用该方法,并特别强调了惰性求值的概念。此外,还介绍了props参数中的属性描述符,包括其内部特性。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值