对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。
我们可以理解 属性描述符
为用来描述一个属性的 方式/方法。
条条大路通罗马,我们达到目的的方式往往不止一种。同样,如何来描述一个属性(或表示一个属性)的方法不止一种,它们形式不同,但殊途同归,都是为了达到同样的目的,或者说都可以达到同样的效果。我们可以理解为既可以用rgba来描述颜色,同样可以用HSLA或十六进制值,都能到达同样的效果。所以,用来描述属性的方式有两种:
- 数据描述
- 存取描述
在《JavaScript权威指南》中说到,除了包含名字和值之外,属性还包含一些标识它们可写、可枚举、可配置的特性。在ES3中程序创建的属性都是可写、可枚举的和可配置的,且无法对这些特性进行修改。
可以认为一个属性包含一个名字和4个特性。value、writable、enumerable、configurable
存取器属性不具有value和writable,它们的可写性是由setter方法的存在与否决定的。
因此,无论是数据描述符也好,还是存取器描述符,最后都是落到4个特性上。
Object.defineProperty(obj, prop, descriptor)
其中descriptor就是描述符,可以是数据描述符,也可以是存取描述符。
网友评论