【js学习笔记-036】--属性的特性
2013-07-23 16:23
302 查看
数据属性的4个特性:值,可写性,可枚举性,和可配置性
存取器的4个特性:读取,写入,可枚举和可配置性。
为了实现属性特性的查询和设置操作,ECMAScript 5 定义了一个名为”属性描述符”的对象,这个对象代表4个特性。描述符对象和它所描述的属性特性同名,因此,数据属性的描述符对象的属性有value,writable,enumerable和configurable.
存取器属性的描述符对象则用get属性和set属性代替value,writable。writable,enumberable和configurable是布尔值。当然get属性和set 属性是函数值
通过Object.getOwnPropertyDescriptor()只能得到自有属性的描述符。要想获取继承属性的特性,需要遍历原型链getPrototypeOf(),要想设置属性的特性,或者想新建属性具有某种特性,则需要调用Object.defineProperty();
var o = {}
Object.defineProperty(o,”x”,{
value:1,writable:true,
enumberable:true,
configurable:true
})
以上,属性存在但不可枚举。
o.x //=>1
Object.key(o)//=>[]
//现在对属性做修改,使其只读
Object.defineProperty(o,”x”,{writable:false});
//试图更改这个属性值
o.x = 2; //操作失败但不报错是,而在严格模式中会抛出类型错误异常
//属性依然可配置,因此可以通过这种方式对它进行修改
Object.defineProperty(o,”x”,{value:2});
//现在将x从数据属性改为存取器属性:
Object.defineProperty(o,”x”,{get:function{return0;}});
o.x ; //=>0
注意:要么修改已有属性,要么新建自有属性,但不能修改继承属性
要修改一个对象的多个属性可以使用Object.defineProperties(),每一个参数是要修改的对象,第二个一个映射表,它包含要新建或修改的属性名称,以及它们的属性描述符。
getter和setter的老式 API
在ECMAScript 5采纳之前,大多数javascript的实现(除IE),已经支持对象直接量语法中的get set。
__lookupGetter__()和__lookupSetter__()用以返回一个命名属性的getter和setter方法。
__defineGetter__()和__defineSetter__()用以定义getter和setter方法。第一个参数是属性名,第二个参数是getter 和setter方法
存取器的4个特性:读取,写入,可枚举和可配置性。
为了实现属性特性的查询和设置操作,ECMAScript 5 定义了一个名为”属性描述符”的对象,这个对象代表4个特性。描述符对象和它所描述的属性特性同名,因此,数据属性的描述符对象的属性有value,writable,enumerable和configurable.
存取器属性的描述符对象则用get属性和set属性代替value,writable。writable,enumberable和configurable是布尔值。当然get属性和set 属性是函数值
通过Object.getOwnPropertyDescriptor()只能得到自有属性的描述符。要想获取继承属性的特性,需要遍历原型链getPrototypeOf(),要想设置属性的特性,或者想新建属性具有某种特性,则需要调用Object.defineProperty();
var o = {}
Object.defineProperty(o,”x”,{
value:1,writable:true,
enumberable:true,
configurable:true
})
以上,属性存在但不可枚举。
o.x //=>1
Object.key(o)//=>[]
//现在对属性做修改,使其只读
Object.defineProperty(o,”x”,{writable:false});
//试图更改这个属性值
o.x = 2; //操作失败但不报错是,而在严格模式中会抛出类型错误异常
//属性依然可配置,因此可以通过这种方式对它进行修改
Object.defineProperty(o,”x”,{value:2});
//现在将x从数据属性改为存取器属性:
Object.defineProperty(o,”x”,{get:function{return0;}});
o.x ; //=>0
注意:要么修改已有属性,要么新建自有属性,但不能修改继承属性
要修改一个对象的多个属性可以使用Object.defineProperties(),每一个参数是要修改的对象,第二个一个映射表,它包含要新建或修改的属性名称,以及它们的属性描述符。
getter和setter的老式 API
在ECMAScript 5采纳之前,大多数javascript的实现(除IE),已经支持对象直接量语法中的get set。
__lookupGetter__()和__lookupSetter__()用以返回一个命名属性的getter和setter方法。
__defineGetter__()和__defineSetter__()用以定义getter和setter方法。第一个参数是属性名,第二个参数是getter 和setter方法
相关文章推荐
- vue.js学习笔记之属性绑定 v-bind
- js学习笔记之数组Array的一些特性
- Vue.js学习笔记:v-bind属性绑定(class,src)
- Ferris这个教程学习笔记:js示例1.1:控制div属性
- javascript学习笔记(二十) 获得和设置元素的特性(属性)
- Vue.js学习笔记:属性绑定 v-bind
- 自定义属性之图片切换实例——初始化——JS学习笔记2015-5-28(第41天)
- 流畅python学习笔记:第十九章:动态属性和特性
- 【js学习笔记-029】-- 属性查询和设置
- 【学习】js学习笔记:对象的遍历和封装特性
- <学习html>第八天笔记-HTML5文档类型和字符集、HTML5新标签与特性(常用新标签、新增input type属性值、常用新属性、多媒体标签)
- JS学习笔记2015-4-15(第二天)——属性操作的注意事项&中括号在JS中的使用
- 自定义属性作业——带缩略图的轮播切换——JS学习笔记2015-5-31(第44天)
- js面向对象的学习笔记九(BOM 与 DOM 经常使用的属性分析)
- js中屏幕尺寸计算的几个属性学习笔记
- 【js学习笔记-083】-----数据集属性
- 自定义属性,匹配数组内容——JS学习笔记2015-5-26(第39天)
- python 学习笔记7(类/对象的属性;特性,__getattr__)
- Ferris教程学习笔记:js示例2.10 函数传参,改变Div任意属性的值
- android 学习笔记13-新特性Fragment 帧动画 补间动画 属性动画