【js学习笔记-036】--属性的特性
来源:互联网 发布:淘宝上买狗狗可靠吗 编辑:程序博客网 时间:2024/06/14 13:40
数据属性的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方法
- 【js学习笔记-036】--属性的特性
- 【js学习笔记-036】--属性的特性
- js学习笔记之数组Array的一些特性
- js 中对象属性的特性
- js 中对象属性特性的描述
- 【笔记】 《js权威指南》- 第6章 对象 - 6.7 属性的特性 (ECMAScript5)
- 【js学习笔记-088】--------其它文档特性
- js新特性(学习笔记)
- 【js学习笔记-037】--对象的三个属性
- 【js学习笔记-084】-----作为Attr节点的属性
- JS修改属性的默认特性(属性描述符)
- JS学习笔记(一)——JS的阻塞特性
- 【js学习笔记-032】--检测属性
- 【js学习笔记-033】--删除属性
- 【js学习笔记-034】--枚举属性
- 【js学习笔记-083】-----数据集属性
- 【js学习笔记-111】-----<canvas>图形属性
- Vue.js学习笔记:计算属性
- 关于Protobuf
- struts 2的标签库
- 倒腾(com.duoduo.args.homework)
- 4次多项式求最小值
- oracle 基础学习03 ---- 函数 触发器 存储过程
- 【js学习笔记-036】--属性的特性
- omnet 信道
- xml解析
- hdu1405 The Last Practice
- mysql启动报错
- 【js学习笔记-037】--对象的三个属性
- Datatable删除行的Delete和Remove方法
- 屎记 李天一列传
- 结构体是可以相互赋值的