参考:https://www.jianshu.com/p/ddaa5179cda6
参考:https://www.cnblogs.com/duyingxuan/p/6474163.html
每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype
属性,这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值;对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链,通过原型链指针_proto_可以向上查找原型链中的原型直到null。
除了基本对象Object(Object.prototype._proto_==null)外其他所有的对象都有原型
function Foo(){}
var f=new Foo()
f._proto_==Foo.prototype
Foo.prototype._proto_==Object.prototype
Object.prototype._proto_==null
f._proto_.constructor==Foo.prototype.constructor==Foo
Foo._proto_==Function.prototype
Function.prototype._proto_==Object.prototype
Object.prototype ._proto_==null
var obj=new Object()
obj._proto_==Object.prototype
Object.prototype._proto_==null
所有JS内置构造器和自定义函数都是Function构造器的原型
所有的构造器也都是一个普通JS对象
Number.__proto__ === Function.prototype
Boolean.__proto__ === Function.prototype
String.__proto__ === Function.prototype
Object.__proto__ === Function.prototype
Function.__proto__ === Function.prototype
Array.__proto__ === Function.prototype
RegExp.__proto__ === Function.prototype
Error.__proto__ === Function.prototype
Date.__proto__ === Function.prototype
Math.__proto__ === Object.prototype
JSON.__proto__ === Object.prototype
Function.prototype._proto_==Object.prototype
Object.prototype._proto_==null