为什么要使用把方法定义在prototype上

属性和方法都可以写在构造函数上,为什么还要使用prototype?

  • 函数上自带【prototype】属性,prototype上的【方法、属性】可被构造函数实例共享
  • 对象上自带【__proto__】属性,指向其构造函数prototype,但在对象上找【属性、方法】找不到时,会通过__proto__继续,一级级往上找,直到找到或__proto__指向是null为止

每次通过new 关键字创建一个实例对象时,会return一个全新的【相互独立】对象,即其构造函数上定义属性和方法,在每个实例对象深拷贝一份,放在不同内存空间

实际上很多时候,我们只需要实例对象属性是独立,方法是共享。

如果相同方法在每个实例对象上都重新定义一次,太浪费内存。所以把共享部分提出来,只定义一次,放在共享空间,而每个实例对象只需要一个指针指向共享空间。这个指针就是每个对象上的__proto__,共享空间就是对象的构造函数上的prototype上的属性方法占用的内存空间

原文地址:https://www.cnblogs.com/baixinL/p/14332592.html