在Javascript语言中,new命令后面跟的不是类,而是构造函数。
举个例子,现在有一个叫做CAT的构造函数,表示猫对象的原型。
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的影响
但是通过上面的例子你会发现:用构造函数生成实例对象,它有一个缺点,那就是无法共享属性和方法。
因为这两个对象的age属性是独立的,修改其中一个,不会影响到另一个。
这样做的坏处就是会造成资源浪费,那么我们要如何来解决这件事呢,那就需要prototype出场了。
这个属性包含一个对象(以下简称"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对象,就会同时影响到两个实例对象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。