先举个不太恰当的例子来帮助理解。
比如你个你的朋友去商店买了同一款型号的手机,那么这个型号就是这款手机的原型,这个型号的所有手机出厂时都具有相同的属性和功能,手机拿回家后你的朋友在手机上安装了微信App,这样他的手机就有了微信功能,但是你没有安装,你的手机就不具有微信功能,因为微信是在该型号手机的一个实体上拓展的功能。
再拿array数组来比较说明
array是js中的一个类,也叫数组原型,所有基于这个原型的实例化数组都具有push,splice等方法和length属性,例如:
var arr1 = new Array();
var arr2 = new Array();
arr1和arr2都具有array的通用方法和属性,但是如果我给arr1单独添加一个方法,如
arr1.sum = function() {
//some code
}
那么arr1就具备了sum方法,进行arr1.sum();操作,而arr2.sum();就会报错,因为arr2没有sum()方法。
但是如果在array的原型上添加sum方法,例如:
Array.prototype.sum = function() {
// some code
}
这样一来,arr1和arr2都具有sum()方法。
所以原型的作用就是给一类元素添加方法或者属性
原型的一个很重要的应用就是给系统自带的方法扩展一些功能。也可以给自定义的一些构造函数添加方法,因为构造的对象也可以看做是函数,看写法:
var arr = new Array();
var obj = new Object();
所以假如我们有个自定义的构造函数Fn,我们也可以给这个构造函数的原型再扩展其他的方法,例如:
function Fn() {
// some code
}
Fn.prototype.extendMethod1 = function() {
// some code
}
Fn.prototype.extendMethod2 = function(){
// some code
}
var fn1 = new Fn();
var fn2 = new Fn();
fn1.extendMethod1();
fn1.extendMethod2();
fn2.extendMethod1();
fn2.extendMethod2()
。