在es6之前没有引入类
同一个构造函数的不同实例化对象调用同一个方法时存在的问题:当多个实例化对象调用类的同一个方法时,每一次调用都会开辟一个新的内存空间。
假如有100个实例化对象调用同一个方法就会开辟100次内存空间,这样就造成了内存浪费
function Star(uname,song){ this.uname=uname; this.song=song; this.sing=function(){ console.log(this.uname+"在唱"+this.song); } } var ldh=new Star("刘德华","冰雨"); var syz=new Star("孙燕姿","遇见"); console.log(ldh.sing==syz.sing);//false 这里调用sing方法开辟了两次空间
调用ldh.sing和syz.sing的内存模型,如图:
为了解决这空间浪费的问题
引入prototype原型对象
每一个对象内部都有一个原型对象,
可以通过console.dir(对象名)打印出来
Star.prototype.changge=function(){ console.log(this.uname+":"+this.song); } var zjl=new Star("周杰伦","说好不哭"); var cyx=new Star("陈奕迅","十年"); console.log(zjl.changge==cyx.changge);//true 说明指向了同一块内存空间
es6加入class之后:
目前完全用es6开发的还很少,因为主流浏览器对es6并不是完全支持
// es6 class Person{ constructor(uname,age){ this.uname=uname; this.age=age; } say(){ console.log(this.uname+"hello"); } } var p1=new Person("张三",18); var p2=new Person("李四",18); console.log(p1.say==p2.say);//true