老人常说,在js中,一切皆对象,那对象又是什么涅,最经常使用的咱们都知道,对象有方法和属性。由一些键值对构成的集合,而后随便用个大括号括起来就造成了一个对象。看起来蛮简单的,可是真是这么简单么,当咱们新建一个对象,为何会‘天生’带有 hasOwnProperty
、 toString
这些方法呢?html
这其实与JS的继承机制有关,JS中对象是经过原型继承的,实例对象都默默带着一个__proto__属性,这个属性默认指向实例对象的原型对象,当访问实例对象没有的属性或者方法时,js引擎会顺着__proto__查找原型对象是否有该属性或者方法。简单说,就是每一个儿子背后都有个强大的粑粑,当儿子想买东东而本身没能力的时候,就会找粑粑‘啃老’,这就是为啥全部的对象都会有 toString
这些方法,真相只有一个,他们有个‘富’粑粑或者耶耶。函数
没错,就是Object.prototype
了,为啥不是Object涅,敲黑板,Object是构造函数啊童靴们,不信能够在控制台打一下看看。那么问题又来了,Object.prototype
有什么用,都有哪些方法呢。学习
当前的js通常的属性都是有4中属性。分别是:数值属性value,可读属性writable,可枚举属性enumerable,和可配置属性configurable。可是因为对象中存在一类特别的属性存取器属性,因此对于存取器属性的值其实是有点不一样的,他有本身的特别的属性特性包括,读取(get),写入(set),可枚举和可配置。为了实现这一对象属性的描述,js中定义了一个属性描述符对象。而且能够经过Object.getOwnPropertyDescriptor()方法来获取某个对象中的特定属性的描述符。固然当前函数只能获取对象自有属性的描述,若是要获取继承属性的描述符的话,须要使用Object.getPrototypeOf();
prototype