ES6扩展内容(对象扩展)

342 阅读3分钟

一、属性相关的方法

1.Object.getOwnPropertyDescriptor()

 方法返回指定对象上一个自有属性对应的属性描述符。
(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)

2.Object.defineProperty()

 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

3.Object.defineProperties()

 方法直接在一个对象上定义一个或多个新的属性或修改现有属性,并返回该对象。
 
 语法: Object.defineProperties(obj,props)
 obj:将要被添加属性或修改属性的对象
 props:该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置

4.getOwnPropertyNames()

 此方法可以获取对象的属性名称,并存储在数组中。

 返回值是存放属性名称的数组。

 特别说明:必须是自有属性,自有属性就是非原型链继承的属性。

5.Object.keys()

 Object.keys方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的 `键名`。

6.Object.values()

 Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的 `键值`。

二、继承相关的方法

1.create()

 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 

2.getPrototypeOf()

 返回[[Prototype]]指定对象的原型(即内部属性的值)。

3.防篡改方法

对 对象进行保护。分成三个级别:
preventExtensions():不允许新增,但可以修改,也可以删除
seal:密封,不允许新增、也不允许删除,但可以修改
freeze:冰封,不允许新增、不允许删除,不允许修改
判断是否处于某种保护的状态:
isExtensible()、isSealed() 、isFrozen()

三、对象的简写

1.属性的简写

属性是可以简写的,前提条件是:
  • 属性的值是一个变量
  • 变量名称和键名是一致的

2.方法的简写

直接省略 :function

四、Object.assign

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
 格式:var newObj = Object.assign(目标对象,源对象1,源对象2,...)

注意细节:

  • (1)第一个参数是目标对象,这个方法把其它的参数中的属性全部加在第一个参数身上。
  • (2)第一个参数在属性复制过程会被更改:会加上其它对象的属性。
  • (3)这个方法的返回就是第一个参数的引用。即返回值就是第一个参数。
  • (4)如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
  • (5)如果只有一个参数,Object.assign会直接返回该参数。
  • (6)Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性
  • (7)Object.assign方法实行的是浅拷贝