前言
本文是JavaScript中关于__proto__,constructor,prototype的理解,希望能得到一些新的看法。
一、图示
在js中,__proto__和constructor是对象拥有的,prototype是函数拥有的,因为在js中函数也是一种对象。所以
函数拥有__proto__,constructor,prototype
对象拥有__proto__,constructor
构造函数:静态属性,静态方法 ----->公开的,共享的
原型: 实例属性,实例方法 ----->被继承
二、__proto__
__proto__属性都是由一个对象指向一个另对象,指向它们的原型对象,也可以理解为指向他的父对象(父亲)。
当访问一个对象的属性时,如果这个对象内部不存在这个属性,那么就会去它的父对象中找这个属性,如果父对象也不存在这个属性,则继续往父对象的父对象中,也就是原对象的爷爷中去找,直到顶端null。作为儿子也可以直接使用他父亲中的属性和方法。
三、prototype
prototype是在函数中才存在的,这个属性是由一个函数指向一个对象。
prototype属性使你有能力向对象添加属性和方法。它的作用包含由特定类型的所有实例共享的属性和方法,让该函数所实例化的对象们都可以找到公用的属性和方法。
在函数创建的时候,都会同时创建这个函数的prototype对象。在通过new实例化后,实例对象才能被调用。
四、constructor
constructor属性是返回对创建此对象的数组函数的引用。是对象拥有的,从一个对象指向一个函数,指向该对象的构造函数。
constructor属性返回值是函数的引用,不是函数名。
总结
函数拥有__proto__,constructor,prototype,对象拥有__proto__,constructor。
__proto__属性指向它们的原型对象。
prototype是在函数中存在的,由函数指向对象。
constructor属性是返回对创建此对象的数组函数的引用。