对象特性(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) 判断对象是否冻结。