JS对象高级属性:数据属性与访问器属性
2016-06-01 15:51
417 查看
一、说明:
使用以下介绍的高级属性,需要注意浏览器是否支持。高版本浏览器,如ie9+通常支持。另外需要说明的一点,这里所说对象包括function和Object,而不是单指Object二、数据属性:
Configurable:true|false,表示能否通过delete将属性删除,默认为true。当把属性的Configurable设置为false后,该属性不能通过delete删除,并且也无法再将该属性的Configurable设置回true.Enumerable: true|false。表示属性可否被枚举,默认true。
Writable: true|false。表示属性是否可写,默认true
Value:属性的值
三、访问器属性:
Configurable:同数据属性的ConfigurableEnumerable: 同数据属性的Enumerable
get:function(){} 属性被读取的时候调用,支持的浏览器IE9+、Firefox4+、Safari5+、Opera12+、Chrom
set:function(newValue){} 属性被写入的时候调用, 支持的浏览器IE9+、Firefox4+、Safari5+、Opera12+、Chrom
四、相关函数及支持的浏览器版本:
Object.defineProperty:IE8是第一个实现此函数的版本Object.defineProperties:IE9+、Firefox4+、Safari5+、Opera12+、Chrom
Object.getOwnPropertyDescriptor:IE9+、Firefox4+、Safari5+、Opera12+、Chrom
五、示例:
1、Object.defineProperty数据属性和访问器属性可以通过Object.defineProperty进行设置。例如:
var person={name:”Leo”} Object.defineProperty(person,”name”,{//设置数据属性 Writable:false;//设置为false,name属性为只读的 Configurable:false //设置为false,则name属性不能通过delete删除 }); Object.defineProperty(person,”name”,{//设置访问器属性 Configurable:false, set:function(newValue){console.log(newValue),name=newValue;} }); //定义set后,当你这样person.name=’Leo’;则浏览器会调用set方法,打出Leo,另外需要 //注意的是name=newValue不能为this.name=newValue。不然会陷入无限递归,引发栈溢出错误
但是如果是下面这样会报错,因为Writable不是访问器属性
Object.defineProperty(person,”name”,{ Writable:false; Configurable:false, set:function(newValue){console.log(newValue)} });
此时person对象的name属性是只读的。需要注意的是IE8是第一个实现defineProperty的浏览器版本。在更低版本的浏览器中是不支持这个方法的。并且ie8也只是部分实现,而不是彻底实现。
2、Object.defineProperties
Object.defineProperties方法。作用跟Object.definePropert一样,只不过Object.definePropert只能定义单个属性,而Object.defineProperies可以定义多个属性。例如:
var person={name:”Leo”,age:18} Object.defineProperties(person,{ name:{ Writable:true }, age{ set:function(newValue){console.log(newValue)} } });
3、Object.getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor方法。以上面的person为例来使用 var descriptor=Object.getOwnPropertyDescriptor(person,”name”); console.log(descriptor.Value); console.log(descriptor.Writable);
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享