1、对象都是由函数创建出来的
例如:var a= new Object();var b=new Function();var c=new Array();像这些Object、Function、Array都是函数。
在实际工作中我们是这样写的var a={};var b=function(){};var c=[];;这两者本质上是没有任何区别的,后者只是一种快捷方式,在编程语言中,一般叫做“语法糖”。
2、函数也是对象(鸡生蛋还是蛋生鸡的问题了)
函数也是对象,并且有一个默认的属性prototype。
看下图:

Paste_Image.png
我们创建了一个superType函数,可以看到superType.prototype也是一个对象:
superType.prototype={
constructor:function(),
__proto__:Object
}
这个对象有两个属性,其中constructor指向一个函数,这个函数即是superType。

Paste_Image.png
另外一个属性__proto__的值则是一个对象。
3、每个函数function都有一个
prototype,即原型;每个对象都有一个__proto__
每个对象的__proto__都指向创建该对象的函数——的prototype。
一步一步来:
- 创建该对象的函数:可以是
Array、Object、Fucntion或者自定义的函数. - 上一步函数的
prototype。
4、
Object.prototype的__proto__指向null
这个对象(Object.prototype)的__proto__属性是个特例。否则的话就就无休止了。
结合上面几点来理解下面这张图片

Paste_Image.png