美文网首页
Object.defineProperty() 和 Object

Object.defineProperty() 和 Object

作者: wangxia34 | 来源:发表于2018-04-09 16:24 被阅读0次

    对象属性的特性描述符,可以理解为对象属性的属性。

        一个对象属性有上面这些属性,其中value,和get,set是用来定义属性值的,这两种定义方式只能采取一种,不能同时出现。

        剩下的configurable,enumerable,writable用来描述一个对象属性的读写特性。这三个都是boolean值。

        configurable表示可配置性,enumerable表示可枚举性,writable表示可修改性。

        configurable表示属性定义后,是否还可以通过Object.defineProperty来修改属性的特性,为false时,再次调用Object.defineProperty方法修改属性特性会报错。并且为false时,是不能通过delete操作符删除此属性的。只有为true时才可以修改或者删除。

        enumerable表示的是此属性是否可以进行枚举,为false时,在for...in循环,Object.keys()中都不会出现此属性。为true时,才可以通过遍历获得此属性。

        writable表示此属性是否可以被修改赋值,为false时,修改属性值无效,严格模式下会报错的。

    这三个读写配置属性的默认值都为false。

    Object.defineProperty

        Object.defineProperty方法用来在对象上定义添加一个属性,或者修改一个属性。

        通过Object.defineProperty()方法给对象添加属性,可以设置属性的读写特征描述符。然后我们之后想要将name属性的writable改为true,可以像下面这样写:

        对于对象已有属性使用Object.defineProperty方法,会修改这个属性的值或者相应的特征描述符。二次使用Object.defineProperty方法有点像$.extend对象赋值方式。

        Object.defineProperty方法就是用来添加或者修改对象属性的,并且可以通过属性特征描述符来控制属性的可配置性,可枚举性,可修改性。

    Object.defineProperties

        Object.defineProperties和Object.defineProperty的关系就如同他们的名字一样,是单数和复数的关系。Object.defineProperty一次只能定义一个属性,而Object.defineProperties一次可以定义多个属性:

    Object.defineProperties(obj, props)

        语法上,Object.defineProperties只有两个参数,比Object.defineProperty少了一个参数。

    Object.defineProperties的第二个参数是一个属性集合对象。

        通过以上的代码形式,使用Object.defineProperties可以一次定义或修改对象上N多个属性,是为了给Object.defineProperty提供方便而生的。

        Object.defineProperty和Object.defineProperties这两个属性在IE9+浏览器中都支持。

    相关文章

      网友评论

          本文标题:Object.defineProperty() 和 Object

          本文链接:https://www.haomeiwen.com/subject/cdpihftx.html