Object 是 JavaScript 的一种 数据类型 。它用于存储各种键值集合和更复杂的实体。Objects 可以通过 Object()
构造函数或者使用 对象字面量 的方式创建。在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype
继承属性和方法,虽然大部分属性都会被覆盖(shadowed)或者说被重写了(overridden)。
JS 对象的对象特性
对象特性(object attribute)有哪些?分别有什么含义?
对象除了包含属性外还拥有三个相关的对象特性:
- 原型 prototype: 指向另外一个对象,本对象的属性继承自它的原型对象
通过Object.getPropertyOf($object)
可以获取对象的原型对象,或者通过非正式的$object.__proto__
获取对象的原型对象 - 类 class: 标志对象类型的字符串
通过 toString 方法获取第8到倒数第二个位置之间的字符可以获取1
2
3
4
5function classof(o) {
if (o === null) return 'Null';
if (o === undefined) return 'Undefined';
return Object.prototype.toString.call(o).slice(8, -1);
} - 扩展标记 extensible flag: 指明了是否可以向该对象添加新属性
通过Object.isExtensible($object)
来判断该对象是否可扩展,通过Object.preventExtensions($object)
来将对象设置成不可扩展的。
tips:Object.seal($object)
可以将对象设置为不可扩展且所有自有(非继承)属性不能删除与配置。
通过 Object.isSealed($object)
判断对象是否被封闭。
Object.freeze($object)
可以将对象设置为不可扩展、不可配置且所有自有(非继承)属性设置为只读。
通过 Object.isFrozen($object)
判断对象是否冻结。
JS 对象的属性特性
对象的属性特性(property attribute)有哪些?分别有什么含义?
- 可写 writeable attribute: 表明是否可以设置该属性的值
- 可枚举 enumerable attribute: 表明是否可以通过for/in循环返回该属性
- 可配置 configurable attribute: 表明是否可以删除或修改该属性
Object.getOwnPropertyDescriptor($object, $property)
可以获取对象的属性特性
1 | Object.defineProperty($object, $property, { |
可以设置对象的属性特性