前面介绍了普通对象的原型链结构,下面会先介绍一下原型对象中的属性和方法,而后介绍函数对象的原型链,最后将原型链进行整合一下.浏览器
第一部分Object.prototype的属性和方法函数
1 Object.prototype.toString方法工具
由于Object.prototype顶级对象中定义了toString方法,因此任何对象都有一个toString方法.prototype
能够用来检测对象的类型,固然只能检测内置对象的类型,若是是自定义构造函数建立的对象的话没法准确检测出来类型.对象
使用方式:Object.prototype.toString.call(对象)blog
输出结果:"[object 构造函数名称]"继承
最后输出的结果中第二个值就是对象对应的对象类型.原型链
2 Object.prototype.hasOwnProperty()开发
判断一个属性是否属于对象自己,而不是继承过来的属性,返回值是true或者false.原型
全部对象均可以直接调用这个方法.
3 Object.prototype.isPrototypeOf()
判断当前对象是不是参数对象的原型对象,返回值true或者false.
全部对象均可以直接调用这个方法.
4 Object.prototype.propertyIsEnumerable()
检测这个属性在对象中是否能够被枚举,返回值true或者false.
是否能够被枚举指的是可否经过for...in循环语句访问到这个属性.
第二部分函数对象的原型链
函数对象的原型链也是基于Object原型链的基础上的.
咱们能够最后总结出两个结论:
a 任何函数都是Function构造函数的实例(包括Object等构造函数以及Function本身,也就是说本身建立了本身):函数.__proto__===Function.prototype===Function.__proto__
b Function的原型对象继承于Object的原型对象:Function.prototype.__proto__===Object.prototype
最后咱们得出:Object.prototype是全部对象的顶级对象.
第三部分原型链的整合
原型链的概念比较抽象,我这里画了一个原型结构图,能够方便记忆,固然能够直接使用浏览器的开发者工具查找一个对象的原型链结构.