美文网首页
属性类型学习

属性类型学习

作者: Sunshine_0676 | 来源:发表于2019-11-14 11:28 被阅读0次

    1.属性类型(数据属性和访问器属性)

    要修改属性默认的特性,必须使用 ECMAScript 5的 Object.defineProperty()方法。

    这个方法 接收三个参数:属性所在的对象、属性的名字和一个描述符对象。

    1.1数据属性

      数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述其行为的特性

      1.1.1 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。

    [[Enumberable]]:表示能否通过for-in循环返回属性。

    [[Writable]]:表示能否修改属性的值。

    [[Value]]:包含这个属性的数据值。

    在调用 Object.defineProperty()方法时,如果不指定,configurable、enumerable 和 writable 特性的默认值都是 false。

    把 configurable 设置为 false,表示不能从对象中删除属性。如果对这个属性调用 delete,则 在非严格模式下什么也不会发生,而在严格模式下会导致错误。而且,一旦把属性定义为不可配置的, 就不能再把它变回可配置了。此时,再调用 Object.defineProperty()方法修改除 writable 之外 的特性,都会导致错误。

    1.2访问器属性

    访问器属性不包含数据值;它们包含一对儿 getter和 setter函数。

    在读取访问器属性时,会调用 getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用 setter函数并传入新值,这个函数负责决定如何处理数据。

    1.2.1 [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为 true。

    [[Enumerable]]:表示能否通过 for-in 循环返回属性。对于直接在对象上定义的属性,这 个特性的默认值为 true。

    [[Get]]:在读取属性时调用的函数。默认值为 undefined。

    [[Set]]:在写入属性时调用的函数。默认值为 undefined。

    访问器属性不能直接定义,必须使用 Object.defineProperty()来定义

    2.定义多个属性

    Object.defineProperties()方法可以通过描述符一次定义多个属性。

    这个方法接收两个对象参数:第一 个对象是要添加和修改其属性的对象,第二个对象的属性与第一个对象中要添加或修改的属性一一对应。

    3.读取属性的特性

    Object.getOwnPropertyDescriptor()方法,可以取得给定属性的描述符。

    这个方法接收两个参数:属性所在的对象和要读取其描述符的属性名称。返回值是一个对象,如果 是访问器属性,这个对象的属性有 configurable、enumerable、get 和 set;如果是数据属性,这 个对象的属性有 configurable、enumerable、writable 和 value。

    相关文章

      网友评论

          本文标题:属性类型学习

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