首页 > Web开发 > 详细

【笔记】js高级程序设计:数据属性和访问器属性

时间:2016-03-29 12:40:39      阅读:114      评论:0      收藏:0      [点我收藏+]

ECMAScript中有两种属性:数据属性和访问器属性

1.数据属性

数据属性是包含一个数据值的位置。

数据属性有四个描述其行为的特性:

[[Configurable]]:(可配置)能否通过delete删除属性,能否修改属性特性,能否将属性改为访问器属性;

[[Enumerable]]:(可枚举)能否通过for-in循环返回属性;

[[Writable]]:能否修改属性值;

[[Value]]:保存着属性值;

要修改属性默认特性,必须使用ECMAScript5中的Object.defineProperty(属性所在对象,属性名字,特性描述符)方法

var person={};
Object.defineProperty(person,"name",{
    configurable:false,  //person对象的name属性不可配置
    value:"joy" //name属性值设置为joy
});
alert(person.name);//joy
delete person.name;//删除无效
alert(person.name);//joy

注意:将configurable设置为false后就不能再设为true了(可配置设为不可配置后就不能变回可配置了)

var person={};
Object.defineProperty(person,"name",{
    configurable:false,  //person对象的name属性不可配置
    value:"joy" //name属性值设置为joy
});
Object.defineProperty(person,"name",{
    configurable:true //can‘t redefine non-configurable property "name"
});
alert(person.name);//joy
delete person.name;//删除无效
alert(person.name);//joy

2.访问器属性

访问器属性不包含属性值,它包含一对getter,setter函数.

让两个属性建立关联,即设置一个属性的值会导致其他属性的值发生变化.

四个特性:

[[configurable]]:(可配置)能否通过delete删除属性,能否修改属性特性,能否修改为数据属性;

[[Enumerable]]:(可枚举)能否通过for-in循环返回属性

[[get]]:读取属性时调用

[[set]]:写入属性时调用

var person={
    _name:"joy" //下划线开头用来表示只能通过对象方法来访问的属性
};
Object.defineProperty(person,"name",{
    get:function(){
        return this._name;
    },
    set:function(newValue){
        this._name=newValue;
    }
});
person.name="xiaoming";
alert(person.name);//xiaoming

注:其实不太明白为什么要使用访问器属性

 

【笔记】js高级程序设计:数据属性和访问器属性

原文:http://www.cnblogs.com/hg0209/p/5332355.html

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