Object新方法总结

2021年9月21日 3点热度 0条评论 来源: cwzhsi

Object总共添加以下几种新方法:

Object.keys()
Object.getOwnPropertyNames();
Object.getPrototypeOf();
Object.defineProperty();
Object.defineProperties();
Object.getOwnPropertyDescriptor();
Object.create();
Object.seal();
Object.freeze();
Object.preventExtensions();
Object.isSealed();
Object.isFrozen();
Object.ixExtensible();

Object.keys()用于收集当前对象的可遍历属性(不包括原型链上的)。以数组形式返回。

Object.getOwnPropertyNames()用于收集当前对象不可遍历和可遍历属性(不包括原型链上的),以数组形式返回。



Object.getPrototypeOf

返回参数对象的内部属性[[prototype]],在标准浏览器中使用私有属性__proto__获取(         IE9,IE10,Opera没有)。Object的新API(除Object.create)都规定,要求第一个参数不能为数字、字符串、布尔、null、undefined这5中字面量,否则抛出一个TypeError异常。

isPlainObject 用于判定目标是不是纯净的Javascript对象,且不是其他自定义类的实例。

Object.defineProperty暴露了属性描述的接口。共涉及6个可组合的配置项

(1)writable:是否可重写

(2)value: 当前值

(3)set: 写入时内部调用的函数

(4)get:读取时内部调用的函数

(5)configurable: 是否允许再次改动这些配置项

(6)enumerable:是否可遍历。

数据属性拥有1,2,5,6。

访问器属性拥有3,4,5,6。

若设置了value和writable,就不能设置set和get。反之亦然。如果没有设置,1,5,6默认为false



注意  defineProperty的第三个参数配置好像没有使用hasOwnProperty进行取值,导致一旦Object.prototype被污染,就很容易程序崩溃。

直接定义成下面这样会报错。



若浏览器不支持definePropety


Object.defineProperties是Object.definePropery的加强版,可一次定义多个属性。若浏览器不支持,可以定义如下:

Object.getOwnPropertyDescriptor用于获取某对象的本地属性的配置对象,其中configurable,enumerable肯定包含在其中,视情况再包含value, writable, 或set和get.

 

Object.preventExtensions,它是三个封锁对象修改API中程度最轻的那个,就是阻止添加本地属性,但是如果本地属性被删除了,也无法再添加回来。

Object.seal 不允许添加本地属性,不准删除已有的本地属性。内部实现就是遍历所有的本地属性,把每个本地属性的configurable改为false;

Object.freeze不许修改本地属性,不准添加本地属性,不准删除本地属性



    原文作者:cwzhsi
    原文地址: https://blog.csdn.net/cwzhsi/article/details/50971388
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。