小夏小夏,可爱爆炸 🤣 💕💕💕
文章目录
- 前言
- 一、对属性操作的控制
- 二、属性描述符
- 三、数据属性描述符
- 四、存取属性描述符
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、对属性操作的控制
如果我们想要对一个属性进行比较精准的操作控制,比如:这个属性是否允许属性被赋值?是否可以被删除?事发后可以被遍历出来?那么我们就可以使用 属性描述符。
- 通过属性描述符可以精准的添加或修改对象的属性;
- 属性描述符需要使用
Object.defineProperty
来对属性进行添加或者修改;
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此
对象。
Object.defineProperty(obj,props,descriptor)
接收值:
- obj要定义属性的对象;
- prop要定义或修改的属性的名称或 Symbol;
- descriptor要定义或修改的属性描述符;
返回值:
被传递给函数的对象
二、属性描述符
分类
- 数据属性(Data Properties)描述符(Descriptor);
- 存取属性(Accessor访问器 Properties)描述符(Descriptor);
也就是说: value writable 不能和 get set 同存
三、数据属性描述符
特性
[[Configurable]]:
表示属性是否可以通过delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符;- 当我们直接在一个对象上定义某个属性时,这个属性的[[Configurable]]为true;
- 当我们通过属性描述符定义一个属性时,这个属性的[[Configurable]]默认为false;
[[Enumerable]]:
表示属性是否可以通过for-in或者Object.keys()返回该属性;- 当我们直接在一个对象上定义某个属性时,这个属性的[[Enumerable]]为true;
- 当我们通过属性描述符定义一个属性时,这个属性的[[Enumerable]]默认为false;
[[Writable]]:
表示是否可以修改属性的值;- 当我们直接在一个对象上定义某个属性时,这个属性的[[Writable]]为true;
- 当我们通过属性描述符定义一个属性时,这个属性的[[Writable]]默认为false;
[[value]]:
属性的value值,读取属性时会返回该值,修改属性时,会对其进行修改;- 默认情况下这个值是undefined;
四、存取属性描述符
特性
[[Configurable]]:
表示属性是否可以通过delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性
描述符;- 和数据属性描述符是一致的;
- 当我们直接在一个对象上定义某个属性时,这个属性的[[Configurable]]为true;
- 当我们通过属性描述符定义一个属性时,这个属性的[[Configurable]]默认为false;
[[Enumerable]]:
表示属性是否可以通过for-in或者Object.keys()返回该属性;- 和数据属性描述符是一致的;
- 当我们直接在一个对象上定义某个属性时,这个属性的[[Enumerable]]为true;
- 当我们通过属性描述符定义一个属性时,这个属性的[[Enumerable]]默认为false;
[[get]]:
获取属性时会执行的函数。默认为undefined[[set]]:
设置属性时会执行的函数。默认为undefined