JavaScript基础(二)-类

一、关于

 JavaScript是js的语法与jJava基本不同,所以单独拿出来说

二、正常总体介绍

  1.JavaScript类中,同样分为属性,构造器,方法三种内容。又分为类,对象,私有三种权限作用域分类。

  2.创建方法function 类名创建,这看上去与方法没有什么区别,区别在于创建时使用new 来创建对象,当然所有手动编写的类都是继承自Object对象。

  3.构造器,与java类似在创建类时直接定义,严格来说是没有构造器的,因为会在变量的初始化哪里直接给变量赋值,没有单独的构造器

  4.在类内部,类属性与对象属性都应该严格按照类名.属性名,this.属性名来使用,方法亦然。

  5.重载,在js中是没有重载这个概念的,不要某个变量,则只需要在变量的位置上设置为undefine即可,但是不可以设置为null,当然如果变量在最后一位,则可以直接不写。

三、类的实现

1.正常编写,正常编写下,基本与总体介绍相同,这样写的好处在于,对象在实例化的同时完成了初始化,类属性,对象属性,私有属性也同样设置分明。但是对于每个对象来说都将对象方法进行了一次保存,造成了资源的浪费(具体没看,有兴趣去了解)。

     function Student(_name,_num,_age){
                 this.name=_name
                 Student.num=_num
                 var age=_age
                 this.getNum=function(){
                     return Student.num
                 }
                 Student.setNum=function(newnum){
                     Student.num=newnum;
                 }
                 Student.method1=function(){
                     document.write("类方法")
                  privatemd();
                 }
                 //私有方法依然只能在类中调用
                  function privatemd(){
                      document.write("私有方法")
                  }
                 this.getName=function(){
                     privatemd()
                     return this.name
                 }
               }

2.原型模式一,原型模式是指,仅仅使用function申明类,并通过prototype对类进行补充,但是补充的所有变量以及方法都是对象级别的,运行方法如下

function Student(_name,_id,_age){
                 //多余操作
                 // this.init(_name,_id,_age);
             }
             Student.prototype.name;
             Student.prototype.id;
             Student.prototype.age;
             Student.prototype.init=function(_name,_id,_age){
                 if(_name!=undefined && _id!=undefined && _age!=undefined){
                     this.name=_name;
                     this.id=_id;
                     this.age=_age;
                 }
             }
             Student.prototype.nextyear=function(){
                 this.age++;
             }

3.原型方法二,在一的基础上讲所有的prototype的操作整合在一起,并通过“,”隔开。原型方法优点在于设置的所有方法存在在一处避免了资源的消耗(不知道具体情况),缺点在于无法创建私有方法与变量,且初始化时需要手动调用,造成了一定的麻烦

function Student(){}
             // alert(1)
             Student.prototype={
                 //初始化类并赋予一定的值,也就是将模型一中的总和一下,不过初始值以后就不需要完成
                 name:0,
                 id:0,   //值的注意的是这里的0并不是初始值,
                 age:0,
                 init:function(_name,_id,_age){
                     this.name=_name;
                     this.id=_id;
                     this.age=_age;
                 },
                 nextyear:function(){
                     this.age++
                 }
             }    

4.最终方法,结合原型方法与正常写法得到的最终方法,继承了他们各自的优点,将初始化以及私有方法与类方法放置于function声明中,将对象方法使用prototype补充,避免了手动初始化的麻烦,资源的浪费也兼顾了各种方法属性的存在

function Student(_name,_num,_age){
                 this.name=_name;
                 Student.num=_num;
                 var age=_age
                 Student.setNum=function(newnum){
                     Student.num=newnum;
                 }
                 function nextyear(){
                     return age++;
                 }
             }
            
             Student.prototype={
                 getAge:function(){
                     return age;
                 }
                 getName:function(){
                     return this.name;
                 }
             }    

猜你喜欢

转载自www.cnblogs.com/qqwhsj/p/10834923.html