码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 属性类型(数据属性 访问器属性)

时间:2016-05-14 15:35:17      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

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

 

 

JavaScript 属性类型(数据属性 访问器属性)

标签:

原文地址:http://www.cnblogs.com/oneplace/p/5492476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!