原型与原型链学习笔记

2016-12-02  本文已影响0人  xyfun

1、对象都是由函数创建出来的

例如:var a= new Object();var b=new Function();var c=new Array();像这些ObjectFunctionArray都是函数。
在实际工作中我们是这样写的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。

一步一步来:

  1. 创建该对象的函数:可以是ArrayObjectFucntion 或者自定义的函数.
  2. 上一步函数的prototype

4、 Object.prototype__proto__指向null

这个对象(Object.prototype)的__proto__属性是个特例。否则的话就就无休止了。

结合上面几点来理解下面这张图片

Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读