在Javascript语言中,new命令后面跟的不是类,而是构造函数。javascript
举个例子,如今有一个叫作CAT的构造函数,表示猫对象的原型。java
function CAT(name){ this.name = name; this.age = 3; }
当咱们new这个构造函数的时候,就会生成一个猫对象的实例。函数
var Tom = new CAT('Tom'); var Jack = new CAT('Jack'); Tom.age = 5; alert(Tom.name+','+Tom.age); //Tom,5 alert(Jack.name+','+Jack.age); //Jack,3 不受Tom的影响
可是经过上面的例子你会发现:用构造函数生成实例对象,它有一个缺点,那就是没法共享属性和方法。this
由于这两个对象的age属性是独立的,修改其中一个,不会影响到另外一个。prototype
这样作的坏处就是会形成资源浪费,那么咱们要如何来解决这件事呢,那就须要prototype出场了。code
这个属性包含一个对象(如下简称"prototype对象"),全部实例对象须要共享的属性和方法,都放在这个对象里面;那些不须要共享的属性和方法,就放在构造函数里面。对象
CAT的代码利用prototype就能够改写成这样子了: function CAT(name){ this.name = name; } CAT.prototype.age = 3; var Tom = new CAT('Tom'); var Jack = new CAT('Jack'); CAT.prototype.age = 5; alert(Tom.name+','+Tom.age); //Tom,5 alert(Jack.name+','+Jack.age); //Jack,5
age属性放在prototype对象里,是两个实例对象共享的。只要修改了prototype对象,就会同时影响到两个实例对象。ip