您的位置:首页 > Web前端 > JavaScript

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

2012-10-30 10:09 295 查看
昨天不注意看到一个题,据说是一个公司的面试题,上面就说到了用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!到这里也就基本完成了简单的说明!有不到之处请多多见谅!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: