Object: 多个属性的集合



1. ****Object: 多个属性的集合
   数据属性: 保存一个数值的属性
     四大特性: 
       1. value: 专门保存属性的值
       2. writable: 控制属性是否可修改
       3. enumerable: 控制一个属性能被for in遍历到
              强调: 依然可用.访问
       4. configurable: 控制2件事: 
1. 能否修改属性的其他特性
       2. 能否删除属性
     何时使用: 只要希望保护属性时
     如何访问: 
       1.获取: 
Object.getOwnPropertyDescriptor(obj,"属性名");
用对象直接量添加的属性,四大特性默认都是true
       2.修改或添加: 
1.修改已有属性: 
 Object.defineProperty(obj,"属性名",{
   特性名:特性值,
   ... ...
   configurable:false //双保险,不可逆
          })
        2.添加新属性: 注意默认值: 都是false!

eg:

获取特性: */
	var emp={id:1001,ename:"scott",salary:10000};
	console.log(
		Object.getOwnPropertyDescriptor(emp,"id")
	);
	//1. 设置id为只读
	Object.defineProperty(emp,"id",{
		writable:false,
		configurable: false//双保险,不可逆!
	});
	
	emp.id=1234;
	console.log(emp.id);


   访问器属性: 专门保护私有数据属性的特殊属性
             自己不保存数据,仅提供访问数据属性的方法
     四大特性: 
       get:function(){return 数据属性的值}
       set:function(value){
验证value;
数据属性=value;
       }
       enumerable: 
       configurable:
     何时使用: 只要使用特定规则保护属性值,就只能用访问

属性。


     如何定义
: 只能用Object.defineProperty
2步: 1. 定义一个实际存数据的属性或变量
             2. 定义访问器属性,保护数据属性或变量
     使用: 和普通数据属性完全一样,都用.访问。
只不过: 尝试读取值时,自动调get方法
      尝试修改值时,自动调set方法

         一般访问器属性都用在构造函数中


eg:

 设置salary,不能被遍历到:
	Object.defineProperty(emp,"salary",{
		enumerable: false
	})
	for(var key in emp){//用for in遍历emp中每个属性
		console.log(key+":"+emp[key]);//输出: 属性名:属性值
	}
	console.log(emp.salary);//正常输出


eg:

设置ename,属性不允许删除
	Object.defineProperty(emp,"ename",{
		configurable: false//不可逆!
	})
	delete emp.ename;//试图删除emp的ename
	console.log(emp.ename);//输出emp的ename

eg:

一个屌丝试图将id改回可写!
	Object.defineProperty(emp,"id",{
		configurable: true//不可逆!
	})
	Object.defineProperty(emp,"id",{
		writable:true
	});
	emp.id=1234;
	console.log(emp.id);


eg:

添加新属性:为emp添加入职时间为当前时间*/
	Object.defineProperty(emp,"hiredate",{
		value:new Date(),
		//writable:false,
		enumerable:true
		//configurable:false
	});
	console.log(
		Object.getOwnPropertyDescriptor(emp,"hiredate")
	);
	//尝试篡改属性的特性,结果: 不可逆
	Object.defineProperty(emp,"hiredate",{
		writable:true,
		configurable:true
	});
	//试图篡改属性值,结果: 只读
	emp.hiredate=new Date("1990/12/12");
	console.log(emp.hiredate);//没变



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值