关于javascript类的编写与继承的一些心得

昨天不注意看到一个题,据说是一个公司的面试题,上面就说到了用javascript来编写一个类并实现一些方法,而且通过这个类来派生出一些派生类,来实现另外的一些方法!这个时候,有些朋友也不会,所以呢,我也在网上找了一下相关的资料说明,看能不能找到这些关于javascript的类的编写的说明文档,找是找到了,不过很多都没有进行详细的说明讲解,所以呢,就有了今天的这篇blog了哈!这里仅是一些粗略的讲解,有不到之处呢请多多见谅哈!高手略过!好,下面开讲解吧!
  1、类的构造
  在这里我以人类为一个简单的例子来构造呢,首先是声明,就像平台写方法一样哦,如下:
  function Human(){}这是方法一,
  var Human = function(){}这是方法二,两种都是可以的,我们就用第一种声明方法呢:完整代码如下:
function Human(name, age, sex) { 
        ///<summary> 
        ///这里为一个人类的简单类 
        ///</summay> 
        ///<param name= "name">人的名称</param> 
        ///<param name= "age">人的年龄</param> 
        ///<param name= "sex">人的性别</param> 
         //region 该类的属性成员 
         this.name = name; 
         this.age = age; 
         this.sex = sex; 
         //endregion 

         //region 该类的一个方法 
         //这个为定义在内部的方法 
         this.ShowMsg2 =  function () { 
                ///<summary> 
                ///显示一个消息,这里为弹出一个对话框,显示年龄 
                ///</summary> 
                alert( this.age); 
        } 
         //endregion 
}
 
  这样就完成了一个类的构造了哈,下面我们还可能通过prototype来为这个类增加一些其他的方法,这样可以在不改变这个类的内部结构的同时,改变这个类,如下:
Human.prototype.ShowMsg =  function () { 
        ///<summary> 
        ///这个为定义在外部的通过prototype来定义的类的方法,显示人的年龄,名称,性别的信息 
        ///</summary> 
        alert( "名称:" +  this.name +  ",年龄:" +  this.age.toString() +  ",性别:" +  this.sex); 
}
  
  这样就完成了一个外部方法的添加了哦!这样也可以说是一个完整类就这样完成了哈,朋友们也可以在内部直接声明完成就可以了,不必在外面进行修改了,只是通过这个方式的好处就是,可以不改变类的原型的基础上进行类的修改,在不同的地方加上不同的方法也是可以的!
  2、类的继承
  大家都知道,写了一个类,就会有用到派生的一些类了,所以这里类的继承也是必不可少的哦,派生类的声明和基类的声明其实并没有什么不同,略有不同之处就是在派生类的内部,调用了基类的构造方法,来实现类的继承!如下
function Man(name, age) { 
        ///<summary> 
        ///这里为一个男人的简单类,继承Human这个类 
        ///</summay> 
        ///<param name= "name">人的名称</param> 
        ///<param name= "age">人的年龄</param> 
        ///<param name= "sex">人的性别</param>         
         
         //这里我们调用基类的构造函数,来实现类的继承 
        Human.call( this, name, age,  "Boy"); 
         //这里为重写基类的内部方法.也可以更改基类通过prototype来定义的外部方法 
         this.ShowMsg =  function () { 
                alert( this.name); 
        } 
}
  
  大家可以看到这里也有一个ShowMsg的方法,这个方法是重写了基类的ShowMsg方法哦,不管基类的方法是通过内部定义的还是外部定义的,这里都可以将其重写,而通过外部prototype来进行重写的话就只能重写基类通过prototype来声明的方法了,比如基类中有一个ShowMsg2的方法,我想要修改它,而我通过prototype来进行修改,如下:
//最后发现这里这一句话是可要可不要的哦 
Man.prototype =  new Human(); 

//这里为重写基类的外部方法,但是这里并不能更改基类的内部方法 
//如基类内部有一个方法叫ShowMsg2,但是这里这个重写方法并不能 
//让基类的这个方法生效, 
Man.prototype.ShowMsg2 =  function () { 
        alert( this.age.toString() +  this.name +  this.sex); 
}
  
  这里并不能将基类的ShowMsg2重写的,所以这种重写是错误的,只能通过派生类的内部进行声明重写才能成功!
  但是基类有一个外部声明的方法叫ShowMsg对不,在这里我们是可以通过派生类的prototype来进行重写的,如下:
//这里为重写基类的外部方法ShowMsg,这里是可以重写的,但是请注意,因为在Man的类内部 
//已经声明了一个ShowMsg方法,所以这里的重写ShowMsg是无效的,在调用方法的时候,他不 
//会执行这里的这个ShowMsg方法,但是会执行派生类内部声明的ShowMsg方法,这就是派生类 
//继承基类,并修改基类方法的方式了 
Man.prototype.ShowMsg =  function () { 
        alert( this.name +  this.age.toString() +  this.sex); 
}
 
  但是朋友们要注意了,如果我们在派生类里面对这个ShowMsg这个方法进行了声明的话,那么这里的这个重写方法也是不会有任何作用的!要特别注意!
  OK!到这里也就基本完成了简单的说明!有不到之处请多多见谅!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值