JavaScript 属性类型(数据属性 访问器属性)
ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”
严格来说,这就相当于说对象是一组没有特定顺序的值。对象的属性或方法都有一个名字,而每个名字映射到一个值。我们可以把ECMAScript的对象想象成散列表,无非就是一组名值对,其中值可以是数据或函数。(高程三 P139)
[译]JavaScript中对象的属性 《高程三 P139 属性类型》 JavaScript笔记--数据属性和访问器属性
JavaScript中有两种不同类型的属性:命名数据属性(named data properties),命名访问器属性(named accessor properties)以及内部属性(internal properties).
命名数据属性
命名数据属性包含一个数据值的位置。在这个位置可以读取和写入值。
数据属性有四个描述其行为的特性(attribute)
- [[Configurable]] 布尔值,表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访问器属性。直接在对象上定义的属性,默认为true
- [[Enumerable]] 布尔值,能否通过for-in循环返回属性。
- [[Writable]] 布尔值,表明能否修改属性的值。(即是否是只读的)
- [[Value]] 属性值
命名访问器属性
访问器属性有四个特性:
- [[Configurable]] 布尔值,表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访问器属性。直接在对象上定义的属性,默认为true
- [[Enumerable]] 布尔值,能否通过for-in循环返回属性。
- [[Get]] 在读取这个属性时调用的函数。 getter函数
- [[Set]] 在为这个属性赋值时调用的函数。 setter函数
内部属性
有一些属性仅仅是为规范所用的,称之为内部属性,因为它们无法通过JavaScript直接访问到,但是它们的确存在,并且影响着程序的表现.内部属性的名称比较特殊,它们都被两个中括号包围着.下面有两个例子:
- 内部属性[[Prototype]]指向了所属对象的原型.该属性的值可以通过Object.getPrototypeOf()函数读取到.该属性的值只能在创建一个新对象的时候通过Object.create()或者__proto__来设置.
- 内部属性[[Extensible]]决定了是否能给所属对象添加新的属性.该属性的值可以通过Object.isExtensible()读取到.还可以通过Object.preventExtensions()将该属性的值设置为false.一旦设置为false,就无法再设置回true了.
特性(attribute)的默认值
如果你不明确的指定某个特性的值,则它们会被赋一个默认值:
[[Value]] undefined
[[Get]] undefined
[[Set]] undefined
[[Writable]] false
[[Enumerable]] false
[[Configurable]] false
属性描述符(Descriptor)
MDN Object.getOwnPropertyDescriptor() JavaScript 属性描述符 Object.getOwnPropertyDescriptors()(阮一峰ES6入门)
The Object.getOwnPropertyDescriptor() method returns a property descriptor(返回的是一个对象) for an own property (that is, one directly present on an object, not present by dint of being along an object's prototype chain) of a given object.
属性描述符(property descriptor)可以将一个属性的所有特性编码成一个对象并返回.该对象的每个属性都对应着所属属性的一个特性
和属性描述符相关的操作:
1. Object.defineProperty( )
The Object.defineProperty() method defines a new property directly on an object, or modifies an existing property on an object, and returns the object.
2. Object.defineProperties()
The Object.defineProperties() method defines new or modifies existing properties directly on an object, returning the object.
除了用Object.defineProperty(...)和Object.defineProperites(...) 来指定属性描述符之外,JavaScriptES5 还提供了几个操作可以用来配置属性描述符。
3. Object.preventExtensions() 和 Object.isExtensible() (阻止属性的扩展)
阻止新的属性被加入到对象
4. Object.seal() 和 Object.isSealed() (封装)
The Object.seal() method seals an object, preventing new properties from being added to it and marking all existing properties as non-configurable.
5. Object.freeze() 和 Object.isFrozen() (冻结)
The Object.freeze() method freezes an object: that is, prevents new properties from being added to it; prevents existing properties from being removed; and prevents existing properties, or their enumerability, configurability, or writability, from being changed. In essence the object is made effectively immutable.(不变的,不可变的,即对象彻底被锁死) The method returns the object being frozen.
JavaScript 属性类型(数据属性 访问器属性)的更多相关文章
- JavaScript 属性类型(数据属性和访问器属性)
数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...
- JavaScript 数据属性和访问器属性
在JavaScript中对象被定义为"无序属性的集合,其属性可以包含基本值.对象或函数."通俗点讲,我们可以把对象理解为一组一组的名值对,其中值可以是数据或函数. 创建自定义对象通 ...
- js中属性类型:数据属性与访问器属性
js中属性类型分为两种:数据属性和访问器属性 在js中,对象都是由名值对构成的,名:就是我们所说的属性名,值就是属性对应的值(基本值.对象.方法). ECMA-262第5版定义了只有内部才用的特性,描 ...
- javascript对象属性——数据属性和访问器属性
ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...
- JavaScript数据属性与访问器属性
ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...
- 浅谈Javascript数据属性与访问器属性
ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.en ...
- Js中的数据属性和访问器属性
Js中的数据属性和访问器属性 在javaScript中,对象的属性分为两种类型:数据属性和访问器属性. 一.数据属性 1.数据属性:它包含的是一个数据值的位置,在这可以对数据值进行读写. 2.数据属性 ...
- JS的数据属性和访问器属性
ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...
- js对象的数据属性和访问器属性
js面向对象 ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此 ...
随机推荐
- python手记(11)
<form method="POST" action="http://host.com/cgi-bin/test.py"> <p>You ...
- OpenRisc-34-ORPSoC跑eCos实验
引言 ORPSoC目前支持好几种OS,除了前面一直介绍的linux,还支持eCos,eCos是RTOS,如果你的系统对时间的要求比较高,那eCos会是一个不错的选择. 本小节就简单介绍一下,在ORPS ...
- 方法控件[置顶] Asp.net总结(一)
本文朋友在青岛逛街的时候突然想到的...这两天就有想写几篇关于方法控件的博客,所以回家到之后就奋笔疾书的写出来发表了 纵观 Asp.net的学习只会之路,可以发现 Asp.net可以分为以下几大块 控 ...
- 利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
我比较喜欢听音乐,特别是周末的时候,电脑开着百度随心听fm,随机播放歌曲,躺在床上享受.但碰到了一个烦人的事情,想切掉不喜欢的曲子,还得起床去操作电脑换歌.于是思考能不能用手机控制电脑切换歌曲,经过一 ...
- 利刃 MVVMLight 2:Model、View、ViewModel结构以及全局视图模型注入器的说明
上一篇我们已经介绍了如何使用NuGet把MVVMLight应用到我们的WPF项目中.这篇我们来了解下一个基本的MVVMLight框架所必须的结构和运行模式. MVVMLight安装之后,我们 ...
- 构建jenkins
一.Jenkins简介: jenkins,之前叫做Hudson,是基于Java开发的一种持续集成工具,用户监控秩序重复的工作,包括: 1>持续的软件版本发布测试项目. 2>监控外部调 ...
- js音乐播放器
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head runat=&quo ...
- digitalocean Vultr Linode 三家海外vps最新真实情况
中国有大批用户,在使用海外vps服务器.好处是不言而喻的:性价比高.带宽大.免备案.可搭梯子,没有后门监控. 有趣的是,每一年的周期观察,都能发现海外vps对中国大陆的线路速度.可用性变化.过去速度快 ...
- RubyMine 2016.1 下载 附注册激活码 破解版方法
注册破解方法: 在要求输入注册的界面选择激活码,然后粘贴以下注册码: 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIj ...
- mac 下mysql
We've installed your MySQL database without a root password. To secure it run: mysql_secure_installa ...