JavaScript高级程序设计(第4版)学习随笔【第八章】

文章目录

  • 一、对象
      • 1、创建对象
      • 2、属性的类型(数据属性和访问器属性)
          • 修改默认的数据属性:Object.defineProperty()和Object.defineProperties()
          • 读取属性的特性:Object.getOwnPropertyDescriptor()和Object.getOwnPropertyDescriptors()
          • 合并对象,使用Object.assign()方法:
          • 对象标识及相等判定:Object.is()
          • 增强的对象语法


一、对象

对象是一组没有特定顺序值的集合。

1、创建对象

通常是new一个Object实例,然后给它添加属性和方法:
JavaScript高级程序设计(第4版)学习随笔【第八章】_第1张图片
更流行的是用对象字面量方法,更为简洁,和前面创建的对象是等价的。
JavaScript高级程序设计(第4版)学习随笔【第八章】_第2张图片

2、属性的类型(数据属性和访问器属性)

数据属性包含一个保存数据值的位置,值会从这个位置读取和写入,有4个特性描述它们的行为。

  • [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特
    性,以及是否可以把它改为访问器属性。默认true。
  • [[Enumerable]]::表示属性是否可以通过 for-in 循环返回。默认true。
  • [[Writable]]:表示属性是否可以被修改。默认true。
  • [[Value]]:包含属性实际的值,读取和写入属性值得位置。默认undefined。
修改默认的数据属性:Object.defineProperty()和Object.defineProperties()

想要修改这些默认的数据属性,需要用 Object.defineProperty()方法。方法接受三个参数(对象,属性名称和描述符对象),比如:
JavaScript高级程序设计(第4版)学习随笔【第八章】_第3张图片0
将name属性的Writable置为false之后可见修改name并没有修改成功。
JavaScript高级程序设计(第4版)学习随笔【第八章】_第4张图片
将name属性的Configurable置为false之后可见删除name并没有删除成功。此处注意将一个属性configurable置为false是不可逆的,该属性设置为不可配置后不能再配置了。
JavaScript高级程序设计(第4版)学习随笔【第八章】_第5张图片
访问器属性不包括数据值,包含一个获取(getter)函数和一个设置(setter)函数,不过这两个函数不是必需的,访问器属性有 4 个特性描述它们的行为。

  • [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特
    性,以及是否可以把它改为访问器属性。默认true。
  • [[Enumerable]]::表示属性是否可以通过 for-in 循环返回。默认true。
  • [[[Get]]:获取函数,在读取属性时调用。默认值为 undefined。
  • [[[Set]]:设置函数,在写入属性时调用。默认值为 undefined。
    和数据属性一样,必须使用Object.defineProperty()修改。
    JavaScript高级程序设计(第4版)学习随笔【第八章】_第6张图片
    year_中的下划线常用来表示该属性并不希望在对象方法的外部被访问。另一个属性 year 被定义为一个访问器属性,其中获取函数简单地返回 year_的值,而设置函数会做一些计算以决定正确的版本(a)。

定义多个属性时,可用Object.defineProperties()方法,可一次性定义多个属性:
JavaScript高级程序设计(第4版)学习随笔【第八章】_第7张图片

读取属性的特性:Object.getOwnPropertyDescriptor()和Object.getOwnPropertyDescriptors()

读取某个属性的特性,使用 Object.getOwnPropertyDescriptor(对象,属性名称)方法:
读取所有属性的特性,使用 Object.getOwnPropertyDescriptors(对象)方法:
JavaScript高级程序设计(第4版)学习随笔【第八章】_第8张图片

合并对象,使用Object.assign()方法:

JavaScript高级程序设计(第4版)学习随笔【第八章】_第9张图片
Object.assign()实际上对每个源对象执行的是浅复制,如果不想改变原有的对象,需要第二种写法。

对象标识及相等判定:Object.is()

JavaScript高级程序设计(第4版)学习随笔【第八章】_第10张图片

增强的对象语法

1、属性值简写
属性名和变量名一样的时候,可简写
JavaScript高级程序设计(第4版)学习随笔【第八章】_第11张图片
2、可计算属性
有了可计算属性,就可以在对象字面量中完成动态属性赋值。
JavaScript高级程序设计(第4版)学习随笔【第八章】_第12张图片
3、简写方法名


待更...

你可能感兴趣的:(javascript,开发语言,ecmascript)