- 理解对象-属性类型 - 数据属性 - 定义:普通定义; - 特性: - configurable: 1. 是否通过 ``delete`` 可以删除 2. 是否可以改为访问其属性 3. 是否可以修改属性特性; - enumerable: 同下 - writable: 是否可以修改属性的值; - value: 这个属性的值; - 访问器属性 - 定义:**必须**使用 ``Object.defineProperty(对象,属性名,特性组成的对象)`` - 常见的使用方式: **设置一个属性的值,会导致其他属性的变化**; - 特性 - configurable : 1.是否能通过 ``delete`` 删除;2.是否能修改特性;3.是否能把属性修改为数据属性; - enumerable: 是否能通过for-in循环返回属性; - set: 写入属性时候调用, 默认值为``undefined``,**如果定义的时候没有写,则不能写入**; - get:读取的时候调用,默认为``undefined``, **定义时没有,不能独缺**; - 例子 ``` var person = { name: 'lily'; // 数据属性 _weight: 50; } // height就是访问器属性 Object.defineProperty(person, 'height', { get: function() { return 168; }, set: function(newVal) { newVal > 180 ? this._weight = 60 : 50; } }) ``` - 三个方法 - ``Object.defineProperty(对象,属性名, 特性组成对象)`` 可以 1. 修改数据属性特性; 2.可以定义访问器属性; - ``Object.defineProperties(对象,属性的字面量对象)`` 可以同一时间,创建多个属性; ``` Object.defineProperties(person, { name: { writable: true, value: 'lily', }, height: { get: function() { return 168 } } }) ``` - 读取属性特性 ``Object.getOwnPropertyDescriptor(对象,属性名)``
delete可以删除 2. 是否可以改为访问其属性 3. 是否可以修改属性特性;Object.defineProperty(对象,属性名,特性组成的对象)delete删除;2.是否能修改特性;3.是否能把属性修改为数据属性;undefined,如果定义的时候没有写,则不能写入;undefined, 定义时没有,不能独缺;三个方法
Object.defineProperty(对象,属性名, 特性组成对象)可以 1. 修改数据属性特性; 2.可以定义访问器属性;Object.defineProperties(对象,属性的字面量对象)可以同一时间,创建多个属性;Object.getOwnPropertyDescriptor(对象,属性名)