ECMAScript中的两种属性
数据属性
数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性一般用于存储数据数值。
数据属性有4个描述其行为的特征。
configurable:true/false,是否可以通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
writable:true/false,是否可以修改属性的值,默认false;
value:undefined,设置属性的值,默认undefined。
要修改默认的特性,就必须使用Object.defineProperty()方法。这个方法接收三个参数:属性所在的对象、属性名字和一个描述符对象。其中,描述符对象的属性必须是:configurable、enumerable、writable和value。设置其中的一或多个值,可以修改对应的特性值。
var person = {};
Object.defineProperty(person,"name",{
writable:false,
value:"hh"
});
console.log(person.name);//hh
person.name = "dd";
console.log(person.name);//hh
因为writable属性是只读的,所以不可以修改。在非严格模式下操作会被忽略,严格模式下会报错。
类似的规则也适合于不可配置的属性
var person = {};
Object.defineProperty(person,"name",{
configurable:false,
value:"hh"
});
console.log(person.name);//hh
delete person.name;
console.log(person.name);//hh
一旦把属性设置为不可配置,就不可以把它变回可配置了,此时再调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误:
var person = {};
Object.defineProperty(person,"name",{
configurable:false,
value:"hh"
});
//抛出错误
Object.defineProperty(person,"name",{
configurable:true,
value:"hh"
});
也就是说,可以多次调用Object.defineProperty()方法修改同一个属性,但在把configurable特性设置为false之后就会有限制了。
访问器属性
访问器属性不包括数值,它们包含一对getter和setter函数(但这两个函数都不是必须的),在读取访问器属性的时候,会调用getter函数,这个函数负责返回有效的值,在写入访问器属性的时候,会调用setter函数并传入新值,这个函数决定如何处理数据。
访问其属性有4个描述其行为的特征。
configurable:true/false,是否可以通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认false;
enumerable:true/false,是否可以通过for in循环返回,默认false;
set:function,读取属性值时调用的函数;
get:function,修改属性值时调用的函数。
var book = {
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function() {
return this._year;
},
set:function(newValue) {
if (newValue>2004) {
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
console.log(book,edition0);//2
—_year是一种常用的记号,用于表示只能通过对象方法访问的属性。
这个例子是用访问器属性的常见方法,即设置一个属性的值会导致其他属性发生变化。
ECMAScript中的两种属性的更多相关文章
- ECMAScript中有两种属性:数据属性和访问器属性。
ECMA-262定义这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问它们.为了表示特性是内部值,该规范把它们放在了两对儿方括号中,例如 [[Enumerable ...
- JSP页面中的pageEncoding和contentType两种属性
关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容 ...
- 网站开发进阶(三十五)JSP页面中的pageEncoding和contentType两种属性
JSP页面中的pageEncoding和contentType两种属性 本文介绍了在JSP页面中经常用的两种属性,分别是pageEncoding和contentType,希望对你有帮助,一起来看. 关 ...
- 关于JSP页面中的pageEncoding和contentType两种属性的区别
转自:http://blog.csdn.net/dragon4s/article/details/6604624 JSP指令标签中<%@ page contentType="text/ ...
- Linux中的两种守护进程stand alone和xinetd
Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...
- Crystal Report在.net中的两种显示方式
Crystal Report在.net中的两种显示方式 编写人:CC阿爸 2014-7-29 近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一 ...
- JavaScript中的两种全局对象
这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...
- MySQL中的两种临时表
MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
随机推荐
- Vue使用Echarts以及Echarts配置分享
一.本篇文章将给大家分享如何在vue中使用echart以及echart各项配置,这些配置都是工作中比较常见以及常用到的,所以给大家分享下,希望对大家有用. 二.vue中使用echart. 1.首先下载 ...
- 2723:不吉利日期-poj
2723:不吉利日期 总时间限制: 1000ms 内存限制: 65536kB 描述 在国外,每月的13号和每周的星期5都是不吉利的.特别是当13号那天恰好是星期5时,更不吉利.已知某年的一月一日是 ...
- propertychange 不起作用
兼容性问题.将$("#systemLogSettings td[name='nMaxFileSize'] input").on("input propertychange ...
- IPv6 VS IPv4,谈谈升级 IPv6 的必要性
11月26日,中办.国办印发了<推进互联网协议第六版(IPv6)规模部署行动计划>,提出国内要在 5~10 年的时间形成下一代互联网自主技术体系和产业生态,建成全球最大规模的 IPv6 商 ...
- 在centos上搭建SVN服务器和MySQL
----------搭建MySQL--------------- 1.查看yum库中的mysql yum list | grep mysql //查看yum库中的mysql 2.选择需要的mysql进 ...
- php数据分页显示基础
一:分页原理: 所谓分页显示,也就是将数据库中的结果集认为的分成一段一段的来显示,需要两个初始的参数: 每页多少条记录 ($PageSize)? 当前是第几页($CurrentPageID)? 还有其 ...
- pku 1330 Nearest Common Ancestors LCA离线
pku 1330 Nearest Common Ancestors 题目链接: http://poj.org/problem?id=1330 题目大意: 给定一棵树的边关系,注意是有向边,因为这个WA ...
- 51nod 1020 逆序排列 DP
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序 ...
- 生成ssl秘钥的方法(纯粹本人记录用的,勿踩)
openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr cp server ...
- SpringBoot入门
简介 从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置.它使用"习惯优于配置"(项目中存在大量的配置,此外还内置了一个习 ...