在javascript中处处都有对象,因此得有构造函数去构造,但通过构造函数来构造的时候对象中的方法会重复声明,会浪费内存,因此原型横空出世。
原型是函数的一个属性,是一个对象。如果函数作为构造函数使用,那么这个构造函数的所有实例都共享这个原型对象。
下面举个例子:
function Bottle(){
this.sayName=function(){}
}
//原型
Bottle.prototype.name="保温杯";
Bottle.prototype.price=199;
Bottle.prototype.sayHello=function(){
console.log('hello');
}
var bootle1=new Bottle();
var bootle2=new Bottle();
console.log(bootle1.sayName===bootle2.sayName); //false
console.log(bootle1.sayHello===bootle2.sayHello); //true
这里当比较通过构造函数来实现的sayName函数的时候两个对象中的两个sayName方法是不一样的,是占用了不一样的空间。
当通过原型来声明的sayHello 方法在两个对象中是一样的,是占用了相同的内存。
因此就因为这个原因,对象构造的时候对象的属性是通过构造函数来初始化,而对象的方法通过原型来实现,只有这样可以防止因只通过构造函数带来的内存浪费问题,又通过原型带来的不能传参数的问题。