二、对象的拓展
2.1 特性
对象是什么,我们用属性来描述
属性是什么,我们用特性来描述
也就是说:特性是用来描述属性的
2.2 Object.defineProperty
作用:
用于设置单个属性的特性
在 ES3.1 中,只要对象能够被访问,就可以任意操作该对象。比如:添加属性,删除属性,修改属性值
在 ES5 中,为对象拓展了一个叫做 “特性” 的东西,用来控制对象中属性的可访问性
使用方式:
Object.defineProperty(obj, property, {});
Object.defineProperty(obj, property, options);
obj:要设置的对象
property:要进行设置的属性
options:描述特性对象
ES3.1:
1 | // ES3.1 |
ES5:
1 | // ES5 |
2.3 特性—配置值
使用方式:
1 | Object.defineProperty(obj, property, { |
总结:
如果一个对象中,存在该属性,此时描述特性对象中的其他属性默认都是true
如果一个对象中,不存在该属性,而是通过定义特性的方式添加的属性,那么描述特性对象中的其他属性默认都是false
2.4 特性—可修改性
使用方式:
1 | Object.defineProperty(obj, property, { |
举例:
1 | var obj = { |
特性—可枚举性
使用方式:
1 | Object.defineProperty(obj, property, { |
举例:
1 | var obj = { |
2.6 特性—可配置性
使用方式:
1 | Object.defineProperty(obj, property, { |
举例:
1 | var obj = { |
修改可配置属性为false之后,再次修改可配置性,会报错,因为已设置color不可配置
2.7 特性方法
get用来获取属性值的
没有参数
返回值就是要获取的属性值
作用域是当前对象
千万不要在该方法中获取属性值,否则会递归死循环
通常我们获取该属性的一个备用值
set用来设置值的
参数就是要设置的值
没有返回值
作用域就是当前对象
千万不要在该方法中设置属性值
通常我们设置该属性的一个备用值
举例:
1 | // 定义对象 |
2.7.1 单项绑定
举例:
1 | <div id="box"> |
2.8 设置多个属性特性
使用方式:
1 | Object.defineProperties(obj, options); |
举例:
1 | // 定义对象 |