构造函数的缺点是浪费内存资源(每次通过new实例化后都会开辟出新的内存空间 ,从而造成资源的泄露),为此我们引入构造函数原型
原型是什么(一个对象,我们也称prototype为原型对象)
原型的作用(共享方法)
我们通过创建构造函数来演示这张图片
function Star(name, age) {
this.name = name;
this.age = age;
this.sing = function() {
console.log("此处随便写一个")
}
}
var sh = new Star("孙赫", 21)
console.log(Star.prototype === sh.__proto__);
这里我们已经写好了构造函数,我们通过方法来验证。
console.log(sh.__proto__===Star.prototype)
通过测试我们可以看到结果为true
从而我们可以理解为prototype是构造函数身上,__proto__是构造函数实例化对象身上,__proto__又指向prototype,所以共享方法。prototype是构造函数抽象出来的一个供各个实例调用的共用方法,最好不要说它是一个对象,会把人搞糊涂的。这是JS等面向对象语言设计时为了减少运行时占用的内存而使用的一种优化方法,我们知道调用即可。
console.log(sh.__proto__.constructor)
console.log(Star.prototype.constructor)
//都指向构造函数本身