1、构造函数的弊端:存在浪费内存的问题。

202109211632210565934477

控制台:

202109211632210589162784

2、原型:每一个构造函数都有一个 prototype 属性,指向另一个对象。这个 prototype 就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。

构造函数通过原型分配的函数是所有对象所共享的;

上面的例子进行console.dir(Star);

控制台:

202109211632211001153151

3、原型的作用:资源共享。

为了达到资源共享,我们需要通过原型对象来动态添加sing方法

202109211632211586506003

控制台:

202109211632212727213830

这时候就达到了资源共享

202109211632212533361889

控制台:

202109211632212546107505

实例对象原型:实例对象有一个属性 proto 指向构造函数的 prototype 原型对象。

实例对象原型__proto__和构造函数的prototype是等价的。

方法的查找规则:首先先看对象身上是否有方法,如果有就执行这个对象上的方法,如果么没有这个方法,因为有__proto__ 的存在,就去构造函数原型对象prototype身上去查找方法。