Object.defineProperty() 在对象上定义/修改属性

Object.defineProperty() 在对象上定义/修改属性

语法:Object.defineProperty(obj对象,prop属性,描述符)

属性:

value:默认值(给对象属性赋值)

writable: 是否能够写/修改 true | false

configurable: 是否能够删除 true | false

enumerable:是否可枚举(遍历) true | false

get:获取属性值

set:设置属性值

注意:使用get或set方法时,不能使用value和writable属性

value 给对象属性赋值

var obj={
	name:'李'
}
console.log(obj);  //{name: "李"}
Object.defineProperty(obj,'age',{
	value:19
});
console.log(obj);  //{name: "李", age: 19}

writable 是否能够写/修改属性值

var obj={
	name:'李'
}
//第一种情况  writable为false,不可修改
Object.defineProperty(obj,'age',{
	value:19,
	writable:false
});
obj.age=22;
console.log(obj.age);   //19

//第二种情况  writable为true,可修改
Object.defineProperty(obj,'age',{
	value:19,
	writable:true
});
obj.age=22;
console.log(obj.age);   //22			

enumerable 是否可枚举(遍历)属性

var obj={
	name:'李'
}
//第一种情况  enumerable为false,不可遍历
Object.defineProperty(obj,'age',{
	value:19,
	writable:false,
	enumerable:false
});
for(var attr in obj){
	console.log(attr);  //name
}

//第二种情况  enumerable为true,可遍历
Object.defineProperty(obj,'age',{
	value:19,
	writable:false,
	enumerable:true
});
for(var attr in obj){
	console.log(attr);  // name  age
}			

configurable 是否能够删除属性

var obj={
	name:'李'
}
//第一种情况  configurable为false,不可删除属性
Object.defineProperty(obj,'age',{
	value:19,
	writable:false,
	enumerable:false,
	configurable:false
});
delete obj.age;
console.log(obj);  //{name: "李", age: 19}

//第二种情况  configurable为true,不可删除属性
Object.defineProperty(obj,'age',{
	value:19,
	writable:false,
	enumerable:false,
	configurable:true
});
delete obj.age;
console.log(obj);  //{name: "李"}

get 获取属性值 | set 设置属性值

var obj = {
	name: '李'
}
var n=10;
//当set没有传参时,属性的值无法改变
Object.defineProperty(obj, 'age', {
	get:function(){
		return n;
	},
	set:function(){

	}	
});
console.log(obj.age);  //10
obj.age=25;
console.log(obj.age);  //10

//当set传参时,属性的值可以改变
Object.defineProperty(obj, 'age', {
	get:function(){
		return n;
	},
	set:function(m){
		n=m;
	}	
});
console.log(obj.age);  //10
obj.age=25;
console.log(obj.age);  //25

注意:在使用Object.defineProperty()属性给对象添加或修改属性时,如果不设置属性的值,则writable、configurable、enumerable都默认为是false。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值