首页 > Web开发 > 详细

js属性和描述符

时间:2014-03-14 18:17:52      阅读:380      评论:0      收藏:0      [点我收藏+]

ECMAScript5中规定了value、writable、configurable、enumerable、get、st共6个属性描述符,用于完成不同的功能。

下面是一个属性的描述定义:

bubuko.com,布布扣
{
   value:"属性值",
   writable:true,
   configurable:true,
   enumerable:true
}
bubuko.com,布布扣

说明:

vaue:属性值

writable:定义是否可以改变

configurable:定义是否可以删除

enumerable:定义是否可以迭代

后三个描述符可定义也可不定义,他们的键值都默认为true。

(一)、使用增强的对象模型定义属性

如果要使用ECMAScript5属性描述符定义属性,必须使用静态方法Object.defineProperty(),该方法是用来定义属性的,在定义属性时可以改变描述符的键值。

语法:

bubuko.com,布布扣
Object.defineProperty(obj,prop,desc)
bubuko.com,布布扣

参数说明:

obj:一个对象,如果要为一个类的所有实例定义属性,那么可以将该参数指定为该类的原型对象

prop:一个字符串,用于指定属性名

desc:一个对象,包含了属性的描述

下面演示该方法为Person类定义nickName属性:

bubuko.com,布布扣
function Person(){}
Object.defineProperty(Person.prototype,"nickName",{

               value:"Tom",
               writable:true,
               enumerable:true,
               configurable:true    

});

var Person_1=new Person();
document.write(Person_1.nickName);//输出“Tom”
bubuko.com,布布扣

如果是定义只读属性就可以将writable键的值设成false。

(二)、定义get和set方法

Object.defineProperty()方法还可以定义get和set存取方法,由于get和se存取方法需要一个私有的中间变量,所以需要定义一个自执行的匿名函数来包含Object.defineProperty()方法定义。

下面为类Person定义nickName属性

bubuko.com,布布扣
function Person(){}
(function(){
    var _nickName="Tom";
     Object.defineProperty(Person.prototype,"nickName",{
          get:function(){return _nickName;},
          set:function(value){_nickName=value;}
});
})();

var Person_1=new Person();
alert(Person_1.nickName);//输出Tom
Person_1.nickName="John";
alert(Person_1.nickName);//输出John
bubuko.com,布布扣

这是一个读写属性,如果想定义只读属性,那么不定因set即可,如果想定义只写属性,那么不定义get即可。

(三)、一次定义多个属性

Object.defineProperties()方法可以在一步操作中定义或者修改多个属性。

语法

bubuko.com,布布扣
Object.defineProperties(obj,props)
bubuko.com,布布扣

参数说明:

obj:一个对象,如果要为一个类的所有实例定义属性,那么可以将该参数指定为该类的原型对象

props:一个对象,包含多个属性的定义

下面为Person类定义nickName和age

bubuko.com,布布扣
function Person(){}
Object.defineProperties(Person.prototype,{"nickName":{
    value:"TOM",
    writable:false
},"age":{
    value:22,
    writable:true
}});
var Person_2=new Person();
document.write(Person_2.nickName+"\t"+Person_2.age);//输出TOM   22
bubuko.com,布布扣

ECMAScript5增强了对对象模型的控制力度,通过新的对象模型,用户可以控制单独的属性是否允许读取、写入、删除和枚举等,甚至可以控制对象是否允许添加或者删除属性,这样就可以实现密封对象的功能。

js属性和描述符,布布扣,bubuko.com

js属性和描述符

原文:http://www.cnblogs.com/flase/p/3599363.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!