Object 的静态成员

静态成员:构造函数对象自己的属性和方法
实例成员:直接定义在实例上的属性和方法
原型成员:直接定义在原型对象上的属性和方法

所有对象都是Object的实例,所以可以访问Object的静态成员

  • Object.toString:返回对象的字符串描述信息
    • object类型返回[object Object]
    • 函数、数组类型返回字符串形式
    • Number类型可调用该方法,传递参数,表示转换进制
  • Object.apply/call:调用其他对象的方法
  • Object.arguments:接收存储函数的实参
  • Object.assign:属性拷贝
  • Object.caller:返回一个函数的引用,这个函数调用了当前的函数;另外callee放回正在执行的函数本身的引用,它是arguments的一个属性,常用于递归函数。
  • Object.constructor:构造器属性,指向构造函数
  • Object.getPropertyOf:获取原型对象,相当于(.__proto__)
  • Object.create:创建对象并设置原型对象
  • Object.getOwnPropertyDescriptor:获取实例属性的描述信息
    • configurable:是否可配置(是否可删除,是否可修改该属性)
    • enumerable:是否可枚举(可用for..in遍历)
    • value:值
    • writable:是否可重写(修改)
  • Object.defineProperty:设置属性的描述信息
    • 修改已经存在的属性,默认为true
    • 添加新的属性,默认是false
    • 参数:第一个参数为需要配置的对象,第二个参数为该对象需要配置的属性,第三个对象为该属性的描述对象
  • Object.getOwnPropertyName:获取对象所有实例属性的名字,不包括原型属性。返回一个数组
  • Object.keys:获取所有对象属性名,不包括原型属性和不可枚举属性

    关于Object.getOwnPropertyNameObject.keys的差别

    1
    2
    3
    4
    5
    6
    7
    8
    > var obj = {name : '名字', age : 20};
    > Object.prototype.des = 'des';
    > //设置name属性不可枚举
    > Object.defineProperty(obj, 'name', {enumerable : false});
    > //结果都不包含原型属性
    > console.log(Object.getOwnPropertyName(obj)); //[name, age]
    > console.log(Object.keys(obj)); //[age]
    >
  • Object.prevenExtensions:禁止扩展属性(不可以添加属性,可删可改)。可通过Object.isExtensible查询。

  • Object.seal:密封属性(禁止扩展和删除,禁止修改configurableenumerable。可以修改属性的值)。可通过Object.isSealed查询。
  • Object.freeze:冻结属性(不可增删改)。可通过Object.isFrozen查询。