Object新方法总结

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不许修改本地属性,不准添加本地属性,不准删除本地属性



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值