为什么源代码里面要用Object对象的各种方法呢?

在浏览器的控制台中通过以下方法打印Object对象的所有属性
Object.getOwnPropertyNames(Object).sort().forEach(function (val) {console.log(val, '\n')});

Object对象方法

  • create()

Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象

  • defineProperty()

Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。

  • defineProperties()

Object.defineProperties() 方法在一个对象上添加或修改一个或者多个自有属性,并返回该对象。

  • getPrototypeOf()

Object.getPrototypeOf() 方法返回指定对象的原型(也就是该对象内部属性[[Prototype]]的值)。

  • getOwnPropertyDescriptor()

Object.getOwnPropertyDescriptor() 返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)

  • keys()

Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。

  • getOwnPropertyNames()

Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。

  • preventExtensions()

Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。

  • isExtensible()

Object.isExtensible() 方法判断一个对象是否是可扩展的(是否可以在它上面添加新的属性)。

  • seal()

Object.seal() 方法可以让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可能可以修改已有属性的值的对象。

  • isSealed()

Object.isSealed() 方法判断一个对象是否是密封的(sealed)。

  • freeze()

Object.freeze() 方法可以冻结一个对象。冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。

  • isFrozen()

Object.isFrozen() 方法判断一个对象是否被冻结(frozen)

  • assign()

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

  • getOwnPropertySymbols()

Object.getOwnPropertySymbols() 方法会返回一个数组,该数组包含了指定对象自身的(非继承的)所有 symbol 属性键。

  • is()

Object.is() 方法用来判断两个值是否是同一个值。

  • setPrototypeOf()

将一个指定的对象的原型设置为另一个对象或者null(既对象的[[Prototype]]内部属性)。

Object.prototype 实例方法

Object.prototype上的方法,都是实例方法,必须在对象实例上调用。

  • hasOwnProperty()

hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性

  • isPrototypeOf()

isPrototypeOf() 方法测试一个对象是否存在于另一个对象的原型链上。

  • propertyIsEnumerable()

propertyIsEnumerable() 方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性。

  • proto

一个对象的proto 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.proto的值就是null).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型。 如果需要访问一个对象的原型,应该使用方法Object.getPrototypeOf。 proto 属性已经被添加在了ES6草案 §B.3.1中。