7.javaScript-面向对象

本文详细解析了ECMAScript5中Object.defineProperty()方法的使用,包括如何通过configurable、enumerable、writable和value等描述符属性控制对象属性的行为,以及如何定义访问器属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要修改属性默认的特性,必须使用 ECMAScript 5的 Object.defineProperty()方法。这个方法 接收三个参数:属性所在的对象、属性的名字和一个描述符对象。其中,描述符(descriptor)对象的属 性必须是:configurable、enumerable、writable 和 value。设置其中的一或多个值,可以修改 对应的特性值。例如: 
 

var person = {};
 Object.defineProperty(person, "name", {  
  writable: false,   
  value: "Nicholas" 
 }); 
 
 alert(person.name);  //"Nicholas"
 person.name = "Greg";
 alert(person.name);  //"Nicholas" 

这个例子创建了一个名为 name 的属性,它的值"Nicholas"是只读的。

var person = {};
 Object.defineProperty(
person, "name", {    
 configurable: false,   
  value: "Nicholas"
 }); 
 
alert(person.name);  //"Nicholas"
 delete person.name;
 alert(person.name);  //"Nicholas" 

把 configurable 设置为 false,表示不能从对象中删除属性。如果对这个属性调用 delete,则 在非严格模式下什么也不会发生,而在严格模式下会导致错误。而且,一旦把属性定义为不可配置的, 就不能再把它变回可配置了。此时,再调用 Object.defineProperty()方法修改除 writable 之外 的特性,都会导致错误: 
 

var person = {};
 Object.defineProperty(person, "name", {  
   configurable: false,  
   value: "Nicholas" 
}); 
 //抛出错误 
Object.defineProperty(person, "name", {  
   configurable: true,   
    value: "Nicholas"
 });

也就是说,可以多次调用 Object.defineProperty()方法修改同一个属性,但在把 configurable 特性设置为 false 之后就会有限制了。 在调用 Object.defineProperty()方法时,如果不指定,configurable、enumerable 和 writable 特性的默认值都是 false。多数情况下,可能都没有必要利用 Object.defineProperty() 方法提供的这些高级功能。不过,理解这些概念对理解 JavaScript对象却非常有用

访问器属性不能直接定义,必须使用 Object.defineProperty()来定义。

var book = {   
  _year: 2004,  
    edition: 1 
}; 
 
Object.defineProperty(book, "year", {   
  get: function(){      
   return this._year;   
  },  
   set: function(newValue){ 
        if (newValue > 2004) {  
            this._year = newValue; 
            this.edition += newValue - 2004;    
     }    
 }
 }); 
 
book.year = 2005; 
alert(book.edition);  //2 

 

转载于:https://my.oschina.net/u/2995989/blog/3018041

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值