一、关于
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; } }