原型与原型链

  看了很多的文章讲原型和原型链,不外乎讲一堆例子,或者用一堆图来视图让我明白这是怎么一回事,但事实上,我越看越困惑。所以我尽量尝试不去用复杂的例子和逻辑来说明这个问题。

  首先声明一个对象obj,obj里有一个__proto__,它指向Object.prototype,所以我们可以看到obj.__proto__ === Object.prototype // true; 对象有__proto__,函数有的是prototype。

  我们只针对这个简单的例子来理解,也就是说var 对象 =  函数(),对象.__proto__ === 对象的构造函数.prototype,事实上这个__proto__是由浏览器生成的,假如我们有一条线的话,那这条线由“对象.__proto__”   指向   “对象的构造函数.prototype”,这样我们可以直接调用proto里面的属性。

  为什么会这样呢?  首先我们得知道什么是共有属性,就像每个对象都可以调用自己的toString,但那样每个对象都要写toString,所以浏览器为了节省内存,只给每个生成的对象一个__proto__,并给__proto__一个可以访问到共有属性prototype的地址,大家都通过__proto__的地址去访问prototype里面的属性。

  这些共有属性构成的对象就叫做原型,由“对象.__proto__”指向 “对象的构造函数.prototype”,“对象的构造函数.prototype的__proto__”指向“null”的这条线,就是原型链。

 



posted @ 2018-09-29 16:31  triplewoodsaid  阅读(107)  评论(0编辑  收藏  举报