本文的大多数理解来自于阮一峰老师的解释,在此补充一些对于初学者有点难理解的地方。
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
1 为何会有prototype的出现-----节约内存
首先看声明一个类
function person(name,age,skill1){ this.name=name this.age=age this.skill=function(){ console.log("i can "+skill1) } }
我们在实例化对象的时候
var p1=new person('lyp',20,'play')
var p2=new person('lyp2',21,'play2')
当我们修改p2的属性时,不会影响到p1的属性。因此,p1,p2对象都指向了不同的内存空间。
假如某些属性,方法是共有的呢,比如人都会走,类别都属于人类。那么这样对于同样的属性/方法就必须开辟两个内存空间。
因此prototype出现了
2 prototype的使用
function person(name,age,skill1){ this.name=name this.age=age this.skill=function(){ console.log("i can "+skill1) } } person.prototype.wuzhong="human" var p1=new person('lyp',20,'play') var p2=new person('lyp2',202,'play2') console.log(p1.wuzhong);//输出 human console.log(p2.wuzhong);//输出human
3 实例化的时候没有指定wuzhong的类别,但是却可以输出。
我的理解类似于其它语言中的继续于父类,类似于再实例化p1时,也调用了person自己的构造函数。姑且理解为基类把。