JavaScript构造函数原型实例对象

 在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

猜你喜欢

转载自www.cnblogs.com/qsj1024/p/11704308.html