zoukankan      html  css  js  c++  java
  • 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;
                     }
                 }    
  • 相关阅读:
    ASP.NET实现文件下载的功能
    优先队列的使用
    关于CSS设置样式的一点建议
    ASP.NET后台弹出消息的方法
    创建漂亮的 CSS 按钮的 10 个代码片段(转载)
    2020高考游记
    最后的OI(HAOI2020游记)
    2020 2 2 20 20
    祭最后的亡魂
    一个感人至深的故事
  • 原文地址:https://www.cnblogs.com/qqwhsj/p/10834923.html
Copyright © 2011-2022 走看看