JavaScript的访问器
一、访问器属性:
1、Configurable:表示能否通过delete删除属性,从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true,表示可以使用delete删除该属性;对于使用Object.defineProperty方式定义的属性,这个特性默认值是false,表示不能使用delete删除该属性。
举例:
var obj = {};
Object.defineProperty(obj,'name',{
value : '何莉莉'
});
obj.age='23'; delete obj.name;//返回值false,严格模式下会报错,属性不会被正常删除。
delete obj.age;//返回值true,属性可以被正常删除。
2、Enumerable:表示能否通过for - in 循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为true,表示可以使用for - in循环返回属性;对于使用Object.defineProperty方式定义的属性,这个特性的默认值为false,表示不能使用for - in 循环返回属性。
for(one in obj){
console.log(one+": "+obj[one]);
}
//结果中不包含使用Object.defineProperty定义的name属性结果
//age: 23
3.get:在读取属性时调用的函数。默认值undefined。
4.set:在写入属性时调用的函数。默认值undefined。
//下面以类似的双向绑定为例,表明给属性赋值时候,如何使用set和get方法。
var obj = {
temp : '',
array : [],
push : function(val){
this.temp = val;
}
}; Object.defineProperty(obj,'temp',{
set:function(val){
obj.array.push(val);
},
get:function(){
return obj.array;
}
}); obj.push("亲");
obj.push("爱");
obj.push("的");
obj.push("你");
//结果
obj.array;//直接从对象中获取
obj.temp;//走get方法
二、定义多个属性
ECMAScript5定义了一个Object.definPropertis()方法。利用此方法可以通过描述符一次定义多个属性。这个方法接受两个对象参数:第一个对象是添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。
例如:
var book = {};
Object.defineProperties(book,{
_year:{
writable : true,
value : 2004
},
edition:{
writable:true,
value:1
},
year:{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
} });
//结果:
三、读取属性的四个特性
var remote = Object.getOwnPropertyDescriptor(book,'_year'); for(var node in remote){ console.log(node + ":" + remote[node]); } //结果
JavaScript的访问器的更多相关文章
- 24 JavaScript对象访问器&JavaScript对象构造器
ES5引入了Getter和Setter Getter和Setter允许定义对象访问器 JavaScript Getter(get关键字):获取对象属性 <script> var perso ...
- JavaScript对象访问器属性
对象访问器就是setter和getter,他们的作用就是 提供另外一种方法来获取或者设置对象的属性值, 并且在获取和设置的时候,可以用一定的其他操作. 看下面代码: <script> va ...
- JavaScript 数据属性和访问器属性
在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...
- JavaScript 属性类型(数据属性和访问器属性)
数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...
- JavaScript中的Get和Set访问器
今天要和大家分享的是JavaScript中的Get和Set访问器,和C#中的访问器非常相似. 标准的Get和Set访问器的实现 function Field(val){ this.va ...
- JavaScript ECAMScript5 新特性——get/set访问器
之前对get/set的理解一直有误,觉得get set 是对象属性方法.看了别人的博客也有很多疑问,今天系统的做了很多测试终于弄明白了.(自己通过看书和写demo测试的,如有不对欢迎大家批评指正) g ...
- javascript对象属性——数据属性和访问器属性
ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...
- JavaScript 属性类型(数据属性 访问器属性)
ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把E ...
- JavaScript中的数据属性和访问器属性
在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...
随机推荐
- nginx域名转发
场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发 实现: server { listen 8051; server_name lo ...
- prometheus监控java项目(jvm等):k8s外、k8s内
前言 虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目. java项目配置 在pom.xml中添加依赖 ...
- JS 逻辑运算符的特点
致谢 首先说一下,其他数据类型转换为布尔类型的规则: null.undefined.0.NaN.空字符串转换为false,其他转化为 true. 1. 取反 ! 首先把数据转化为布尔值,然后取反,结果 ...
- shell脚本编程练习
转至:http://www.178linux.com/88406 1.写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态 在线的主机使用绿色 ...
- Weisfeiler-Lehman(WL) 算法和WL Test
Weisfeiler-Lehman 算法 很多论文中会讲,从另一个角度来讲,GCN模型可以看作图上非常有名的 Weisfeiler-Lehman 算法的一种变形.那么什么是 Weisfeiler-Le ...
- Pandas:plot相关函数
0.注意事项 及 各种错误 1)绘制bar图时,如果出现重复的x值被合并到一个情况(导致X轴应该显示内容有缺失),可能是由于Pandas版本太低: 2)无法设置中文title,在代码中加入两句话: p ...
- Vue中组件的递归
先来说下需求,就是一个表单,会有树形结构一样,会有子表单,表单显示什么内容是后台通过接口数据来确定的:这个时候就和树形结构一样,肯定会有子组件的递归:这次是自己第一次写递归,遇到了三个问题记录下: 1 ...
- QUIC协议详解
声明 本文可以自由转载但需注明原始链接.本文为本人原创,作者LightningStar,原文发表在博客园.本文主体内容参考论文[1]完成. 介绍 QUIC,发音同quick,是"Quick ...
- js识别手机型号做业务判断
navigator为Window对象的一个属性,指向了一个包含浏览器相关信息的对象. navigatot中包含了一些常用到的属性,如: navigator.appVersion 浏览器的版本号 nav ...
- 使用Dapper访问SQL Server数据库
对应Demo程序名:DapperDemo 准备工作:为项目安装Dapper类库 方法一:项目中添加:项目名右键:Manage NuGet Packages:搜索Dappe:点击安装 方法二:在NuGe ...