JavaScript中对象的数据属性和访问器属性

数据属性

数据属性,顾名思义就是存储数据的属性。 数据属性的有四个描述其行为的特征(不能直接访问),如下:

 [[Configurable]],表示能否用delete删除属性,从而重新定义;能否修改属性的特性,或者能否把属性修改为访问器属性,默认为true
 
 [[Enumerable]],表示能否通过for-in返回属性,默认为true
 
 [[Writable]],表示能否修改属性,默认为true
 
 [[Value]],包含这个属性的值,数据的值得读写都是在该位置上,默认为undefined

修改属性的默认特性,必须使用 Object.defineProperty()方法,该方法接受三个参数,属性的所属对象,要修改的属性,和一个描述符对象。其中描述符对象的属性必须是Configurable、Enumerable、 Writable、Value,设置一个或多个的值,来修改对应的属性的特性。

var person={
			 name:'',
			 age:19
			 }
 alert(person.name);   //undefined
Object.defineProperty(person,'name',{value:'dva'});/* 定义数据属性的值 */
alert(person.name);		//dva

for(var i in person){
	 console.log(i);	//name,age
 }
 Object.defineProperty(person,'name',{enumerable:false});	//定义该属性不能通过for-in遍历得到
 for(var i in person){
	 console.log(i);	//age
 }

当然,也可以使用Object.defineProperty()方法新定义一个对象的属性(并没有这样做的必要)。

访问器属性

访问器属性,即用作访问器(可以访问该对象的其他属性)的属性。访问器属性不包含数据值,包含一对getter和setter函数,(不必需),同样有四个描述其行为的特性。

 [[Configurable]],表示能否用delete删除属性,从而重新定义;能否修改属性的特性,或者能否把属性修改为数据属性,默认为true
 
 [[Enumerable]],表示能否通过for-in返回属性,默认为true
 
 [[get]]:读取访问器属性时调用的方法,默认为undefined

 [[set]]:写入访问器属性时调用的方法,默认为undefined

访问器属性不能直接定义,必须使用Object.defineProperty()方法。访问器属性的常用用途就是当需要设置其中一个属性时,另一些属性跟着变化。

 var person = {
				_year:2019,
				age:20,
			 }
 Object.defineProperty(person,'year',{		/* 定义访问器属性 */
		get:function(){					//读取访问器属性year时调用该方法
				return this._year;
			},
		set:function(newvalue){		//写入访问器属性year时调用该方法
				this.age += newvalue-this._year; 
					this._year = newvalue;		
				}
			 });

console.log(person.year);	//2019	

person.year = 2022;	//修改访问器属性的值
 console.log(person.age);//23

访问person的year属性返回的是person._year的值,当修改访问器属性year时,age会随之改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值