Object对象 Object对象

JavaScript原生提供一个Object对象(注意起首的O是大写),所有其他对象都继承自这个对象。Object本身也是一个构造函数,可以直接通过它来生成新对象。

Object作为构造函数使用时,可以接受一个参数。如果该参数是一个对象,则直接返回这个对象;如果是一个原始类型的值,则返回该值对应的包装对象

new Object(123) instanceof Number
// true

与其他构造函数一样,如果要在Object对象上面部署一个方法,有两种做法。

(1)部署在Object对象本身,Object 对象的静态方法

(1)对象属性模型的相关方法
    Object.keys()用来遍历对象的属性。它们的参数都是一个对象,都返回一个数组,该数组的成员都是对象自身的(而不是继承的),且可枚举的所有属性名
    
    Object.getOwnPropertyNames():返回直接定义在某个对象上面的全部属性的名称(自身和继承)。
    
    Object.getOwnPropertyDescriptor():获取某个属性的attributes对象。
    Object.defineProperty():通过attributes对象,定义某个属性。
    Object.defineProperties():通过attributes对象,定义多个属性。


(2)控制对象状态的方法

    Object.preventExtensions():防止对象扩展。
    Object.isExtensible():判断对象是否可扩展。
    Object.seal():禁止对象配置。
    Object.isSealed():判断一个对象是否可配置。
    
(3)原型链相关方法

    Object.create():生成一个新对象,并该对象的原型。
    Object.getPrototypeOf():获取对象的Prototype对象。

(2)部署在Object.prototype对象,Object对象的实例方法

除了Object对象本身的方法,还有不少方法是部署在Object.prototype对象上的,所有Object的实例对象都继承了这些方法。object类型是所有它的实例的基础,所以object类型所具有的方法,也同样存在于更具体的对象中

所有构造函数都有一个prototype属性,指向一个原型对象。凡是定义在Object.prototype对象上面的属性和方法,将被所有实例对象共享。

Object实例对象的方法,主要有以下六个。

(1) valueOf():返回当前对象对应的值。
var o = new Object();
o.valueOf() === o // true

(2)toString():返回当前对象对应的字符串形式。
var o = new Object("hello");
o.toString();//"hello"

(3)toLocaleString():返回当前对象对应的本地字符串形式。

(4)hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
o.hasOwnProperty("x")//o自身是否有"x"属性

(5)isPrototypeOf():判断当前对象是否为另一个对象的原型。
p.isPrototypeOf(o)//检测p是否是o的原型

(6)propertyIsEnumerable():判断某个属性是否可枚举。
o.propertyIsEnumerable("x")