javascript属性描述符详细介绍
分类:实例代码
ECMAScript5规定了value、writable、configurable、enumerable、get、set共6个属性描述符,用于完成不同的功能。
下面就介绍一下这六个属性描述符的作用,先看一个属性描述符的定义:
{ value:"属性值", writable:true, configurable:true, enumerable:true }
参数介绍:
(1).vaue:规定属性值。
(2).writable:用来规定属性是否可写,如果是true就是可写,如果为false就是不可写。
(3).configurable:定义是否可以删除,如果是true就是可以删除,如果为false就是不可删除。
(4).enumerable:定义是否可以迭代,如果是true就可以迭代,如果false则是不可以迭代。
后三个描述符可定义也可不定义,他们的键值都默认为true。
使用增强的对象模型定义属性:
如果要使用ECMAScript5属性描述符定义属性,需要使用静态方法Object.defineProperty()。
该方法是用来定义属性的,在定义属性时可以改变描述符的键值。
语法结构如下:
Object.defineProperty(obj,prop,desc)
代码实例如下:
function Antzone(){} Object.defineProperty(Antzone.prototype,"url",{ value:"pipipi.net", writable:true, enumerable:true, configurable:true }); var antzone=new Antzone(); console.log(antzone.url);
如果希望属性是只读的,那么只需要将writable属性值设置为false即可。
我们也可以一次性定义多个属性,可以参阅Object.defineProperties()方法一章节。
定义get和set方法:
Object.defineProperty()方法还可以定义get和set存取方法。
由于get和set存取方法需要一个私有的中间变量,最好定义一个自执行的匿名函数来包含Object.defineProperty()方法定义。
function Antzone(){} (function(){ var _url="pipipi.net"; Object.defineProperty(Antzone.prototype,"url",{ get:function(){return _url;}, set:function(value){_url=value;} }); })(); var antzone=new Antzone(); console.log(antzone.url); antzone.url="51texiao.cn"; console.log(antzone.url);
