目录

对象扩展

name 属性

属性的遍历

super关键字

Object.is()

Object.assign()

Object.getOwnPropertyDescriptors()

Object.setPrototypeOf()

Object.getPrototypeOf()

Object.keys()、Object.values、Object.entries()、Object.fromEntries()

Object.hasOwn()

对象扩展

本文简单介绍以下ES6对对象新增的方法:

name 属性

函数的name属性,返回函数名。对象方法也是函数也有name属性。

如果对象方法使用取值函数(getter)和存值函数(setter),需要该方法的属性的描述对象在对象get和set属性上面,返回值是方法名前加上get和set。

有两种特殊情况:

属性的遍历

ES6中一共有 5 种方法可以遍历对象的属性。

(1) for...in

循环遍历对象自身属性和继承的可枚举属性

(2)Object.keys(obj)

返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)的键名

(3)Object.getOwnPropertyNames(obj)

返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性)的键名

(4)Object.getOwnPropertySymbols(obj)

返回一个数组,包含对象自身的所有Symbol属性的键名

(5)Reflect.ownKeys(obj)

返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是Symbol或字符串,也不管是否可枚举。

super关键字

和this关键字总是指向函数所在的当前对象一样,ES6新增了另一个类似的关键字super,指向当前对象的原型对象。

下面代码中,super.say() 指向原型对象 obj 的say方法,但是绑定的this却还是当前对象obj,因此输出的结果不是hello而是world。

Object.is()

用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。

Object.assign()

用于对象的合并,将源对象所有可枚举的属性,复制到目标对象上。

用到对象合并我们可以就会遇到一些问题了,请看如下例子:

在使用这个ES6新增的方法时,应该注意以下内容:

Object.getOwnPropertyDescriptors()

返回指定对象所有自身属性(非继承属性)的描述对象。

Object.setPrototypeOf()

方法作用与__proto__相同,用来设置应该对象的原型对象(prototype),返回参数对象本身。

Object.getPrototypeOf()

方法用于读取一个对象的原型对象,与Object.setPrototypeOf()方法配套。

Object.keys()、Object.values、Object.entries()、Object.fromEntries()

三种方法都是返回一个数组,之间的区别请看如下:

Object.hasOwn()

方法可以判断某个属性是否为原生属性,接受两个参数,第一个是参数是要判断的对象,第二个是属性名。

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: