JS Object 对象

Object 是 JavaScript 的一种 数据类型 。它用于存储各种键值集合和更复杂的实体。Objects 可以通过 Object() 构造函数或者使用 对象字面量 的方式创建。在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法,虽然大部分属性都会被覆盖(shadowed)或者说被重写了(overridden)。

阅读更多

JS 对象的对象特性

对象特性(object attribute)有哪些?分别有什么含义?

对象除了包含属性外还拥有三个相关的对象特性:

  1. 原型 prototype: 指向另外一个对象,本对象的属性继承自它的原型对象
    通过 Object.getPropertyOf($object) 可以获取对象的原型对象,或者通过非正式的 $object.__proto__ 获取对象的原型对象
  2. 类 class: 标志对象类型的字符串
    通过 toString 方法获取第8到倒数第二个位置之间的字符可以获取
    1
    2
    3
    4
    5
    function classof(o) {
    if (o === null) return 'Null';
    if (o === undefined) return 'Undefined';
    return Object.prototype.toString.call(o).slice(8, -1);
    }
  3. 扩展标记 extensible flag: 指明了是否可以向该对象添加新属性
    通过 Object.isExtensible($object) 来判断该对象是否可扩展,通过 Object.preventExtensions($object) 来将对象设置成不可扩展的。

tips:
Object.seal($object) 可以将对象设置为不可扩展且所有自有(非继承)属性不能删除与配置。
通过 Object.isSealed($object) 判断对象是否被封闭。

Object.freeze($object) 可以将对象设置为不可扩展、不可配置且所有自有(非继承)属性设置为只读。
通过 Object.isFrozen($object) 判断对象是否冻结。

JS 对象的属性特性

对象的属性特性(property attribute)有哪些?分别有什么含义?

  1. 可写 writeable attribute: 表明是否可以设置该属性的值
  2. 可枚举 enumerable attribute: 表明是否可以通过for/in循环返回该属性
  3. 可配置 configurable attribute: 表明是否可以删除或修改该属性

Object.getOwnPropertyDescriptor($object, $property) 可以获取对象的属性特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Object.defineProperty($object, $property, {
value: $value,
writable: $boolean,
enumerable; $boolean,
configurable: $boolean
})
Object.definePropertys($object, {
$property1: {
value: $value,
writable: $boolean,
enumerable; $boolean,
configurable: $boolean
},
$property2: {
...
}
})

可以设置对象的属性特性