理解js的prototype属性

prototype是对象的属性吗?

举例:
理解js的prototype属性
理解js的prototype属性
可以看到,如果prototype是object的属性,上面肯定会alert出东西,但是是undefined,充分说明prototype不是对象的属性

其实prototype是函数的属性

测试为什么说prototype是函数的属性

prototype是函数的属性,属于函数,只有函数能够引用他,并且函数的prototype属性返回的是一个对象,下面实验:
理解js的prototype属性
理解js的prototype属性
可以发现:对象调用prototype返回的是undefined,而函数调用prototype返回的是对象,充分说明了,prototype是函数的属性!!!不是对象的属性!!!并且这个prototype是函数的原型对象,

那么,这个时候你肯定对是函数的原型对象 这个说法感到很懵逼?what???怎么来的这么个时髦的词语???

为什么说prototype是函数的原型对象?

js的JSON.stringify用来格式化对象为json字符串,那么我们来格式化一下函数的prototype对象:
理解js的prototype属性
理解js的prototype属性
可以看到当前这个自定义函数的prototype是一个空对象,我们来给这个空对象定义属性和方法分别测试一下:
定义属性:
理解js的prototype属性
理解js的prototype属性
可以发现我们顺利的取到了为函数的prototype这个原型对象定义的属性name,name为何称这个是原型对象呢?其实意思就是这个函数的原型对象的所有属性和方法被这个函数的所有对象所共享,我们测试一下:
理解js的prototype属性
理解js的prototype属性可以看到我们创建了一个对象以后,他天然的就有这个age属性,并且为12,我们再创建一个这个函数的对象来测试一下:
理解js的prototype属性
理解js的prototype属性
可以发现又是12
这样我们就理解了:利用func函数实例化的所有对象都可以获取age这个属性,因此给func函数的prototype赋值属性以后给func函数的所有的实例对象都可以访问,这就可以理解为什么说func.prototype是func函数的原型对象了

我们再给func函数的原型对象赋值方法测试一下:
理解js的prototype属性
理解js的prototype属性

参考:https://www.cnblogs.com/loveyoume/p/6112044.html