Javascript 属性的特性

Javascript 属性有四个特性:
  • configurable 是否可以删除和修改该属性
  • enumerable 是否可以通过for/in循环返回该属性
  • value  属性的值
  • writable 是否可以修改该属性的值


//声明类和类的构造函数
function Person(name,age){ 
	this.name=name; //类的属性
	this.age=age;
	this.sayHello=function(){ //类的方法
		document.writeln("Hello I'm " + this.name);
	}
	this.setName=function(name){
		this.name=name;
	}
	this.setAge=function(age){
		this.age=age;
	}
}
var person = new Person('xiao', 21);

var name_pro =Object.getOwnPropertyDescriptor(person,'name');
document.writeln(name_pro.configurable); //是否可以删除和修改该属性
document.writeln(name_pro.enumerable); //是否可以通过for/in循环返回该属性
document.writeln(name_pro.value); 
document.writeln(name_pro.writable); //是否可以设置该属性的值
name_pro.writable=false;
name_pro.configurable=false;
name_pro.enumerable=false;
person.name='him';
document.writeln(person.name); //=>him, 很奇怪name属性仍然被修改
document.writeln('='+Object.keys(person)+'='); //=>name,age,sayHello,setName,setAge 很奇怪设置无效
//定义新的属性
Object.defineProperty(person, 'weight', {value:100, 
	writable:true, enumerable:true, cofigurable:false});
document.writeln(person.weight);	
//修改已有属性
Object.defineProperty(person, 'weitht', {writable:false, enumerable:false});
person.weight=120;
document.writeln(person.weight); //=>120
document.writeln('='+Object.keys(person)+'='); //name,age,sayHello,setName,setAge,weight 很奇怪设置无效
//批量新建属性
Object.defineProperties(person, {
	sex:{value:'male', writable:true, enumerable:false, configurable:false},
	language:{value:'Chinese', writable:true, enumerable:false, configurable:false},	
});


属性描述符的使用规则,违反规则的操作将抛出异常:
  • 1. 如果对象是不可扩展的,则可以编辑已有的属性,但不能添加新属性。
  • 2. 如果属性是不可配置的,则不能修改他的可配置性和可枚举性
  • 3. 如果存取器属性是不可配置的,则不能修改其getter和setter方法,也不能将它转换为数据属性。
  • 4. 如果数据属性是不可配置的,则不能将它转换为存取器属性。
  • 5. 如果数据属性是不可配置的,则不能将他的可写性从false改为true,但可以从true改为false。
  • 6. 如果数据属性是不可配置且不可写的,则不能修改他的值。然而可配置但不可写属性的值是可以修改的(实际上是先将它标记为可写的,然后修改它的值,最后转换为不可以写的)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_26182553

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值