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
。
看下图:
我们创建了一个superType函数,可以看到superType.prototype
也是一个对象:
superType.prototype={
constructor:function(),
__proto__:Object
}
这个对象有两个属性,其中constructor
指向一个函数,这个函数即是superType。
另外一个属性__proto__
的值则是一个对象。
3、每个函数function都有一个
prototype
,即原型;每个对象都有一个__proto__
每个对象的__proto__
都指向创建该对象的函数——的prototype。
一步一步来:
- 创建该对象的函数:可以是
Array
、Object
、Fucntion
或者自定义的函数. - 上一步函数的
prototype
。
4、
Object.prototype
的__proto__
指向null
这个对象(Object.prototype
)的__proto__
属性是个特例。否则的话就就无休止了。
结合上面几点来理解下面这张图片