
image.png
一、基本原理解释:
- 所有对象(包括函数)都是通过
__proto__指向某个原型对象 - 所有对象(除了null)都会通过
__proto__直接或间接的指向无名的花对象。 - 每个函数都会额外具备一个
prototype的指针,指向到那个原型对象。 - 由
new 函数名()产生的对象,其__proto__就会指向那个原型对象。 -
原型对象所有的成员都会被指向它的那些对象访问到(直接或间接),所以可以认为:函数是对象的工厂。 - 针对
原型对象的读策略是:依链查找,直到找到花对象;而写策略是:直接在对象本身进行挂载或覆盖。
二、进阶的认知:
- 函数自身也是对象,其
__proto__指向的对象是一个名字为Function的函数的prototype指向的对象,所以可以认为Function是函数的工厂,可以如下描述:
var Object=new Function();
var Date=new Function();
当然,如果是我们自定义的函数本质上是如下方式定义的:
var Person=new Function();
传参和函数体如下:
var Person=new Function("name","this.name=name");
- JS的设计者要完成:
Function自身是函数,但也是对象的目标,所以最后提出以下设想:Function对象是是Function函数产生的!基于以上设想,将Function做为对象使用的__proto__指向到Function做为函数的__prototype__,完成全部的设计。