Javascript 属性的特性

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


//声明类和类的构造函数
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},
});


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值