单从实际应用上做理解,某个项目我需要写一个构造函数
dogs就是构造函数,同时也是一个函数,也是一个对象,name和color就是这个对象的属性
我需要用到这个构造函数了,生成了两个实例
dog1,dog2就是构造函数dogs的实例
从控制台打印可以看到,实例自然拥有了构造函数的属性(哪怕不传值,属性依然在,只是对应的值为undefined)
如果此时我需要构造函数里面有公共的方法
给构造函数添加了方法run
实例自然也拥有了对应的方法,运行实例的run方法
控制台打印出‘ 飞快的跑了1米‘
那么什么是原型?在说这个之前,在控制台打印一下
得到了false结果,也就是说我们每个实例调用原型的方法,都会生成一个新的方法。占用内存
构造函数的prototype属性就是它的原型,只有构造函数才拥有prototype属性,我可以在构造函数的原型上添加方法,构造函数的实例同样可以访问到这个新方法
调用结果‘响亮的叫了2声’
在控制台打印出实例dog1
可以看到,run方法直接在dogs方法中,而bark方法却在dogs的__proto__属性下
构造函数的.prototype===实例的.__proto__===构造函数的原型,通过构造函数new出来的实例却和构造函数本身没什么关系了。
两个不同实例的bark函数都是从构造函数的原型继承而来,是同一个函数,不多占用内存