函数和原型

在看这篇文章 《理解Javascript原型》 时,有几段话把我看得一头雾水,举的列子我也没太看明白

每个函数都有一个原型属性。反过来,如果不是函数,将不会有这样一个属性。

函数A的原型属性(prototype property )是一个对象,当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例

于是自己在Chrome控制台测试了一下,总算能理解了,我们把这几段话一句句来剖析:

每个函数都有一个原型属性。

函数A的原型属性(prototype property )是一个对象


可看出,a是一个函数,拥有原型属性protoype,且该属性是一个对象

反过来,如果不是函数,将不会有这样一个属性。


b是由a实例化的一个对象,不是函数,故b没有原型属性

当这个函数被用作构造函数来创建实例时,该函数的原型属性将被作为原型赋值给所有对象实例

继续看这一句话,上面b是由a实例化的,所以a会将其原型属性(prototype)赋给b的原型


可看到b的原型和a的原型属性一致


也许看到这里你已经被 原型原型属性 弄晕了,我们阐释一下二者的区别:

原型属性  是指对象的属性 prototype

原型  是指对象的属性 __proto__,对应的是该对象构造函数内的原型属性

所以获得一个对象的原型可以通过obj.__proto__,也可以用obj.constructor.prototype获得



 

posted @ 2015-11-12 17:40  Hisheng  阅读(129)  评论(0编辑  收藏  举报