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);

回复

我来回复
  • 暂无回复内容