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

JavaScript面向对象之继承和多态

2012-05-13 14:18 190 查看
前言:我之前已经写过了javascript如何创建一个类似于java写法的类User,并且也写了一些类似的一些写法。

既然关注了面向对象的类,就无可避免地要提到面向对象的特性:封装,继承和多态。

封装:封装就像是一个类,它把对象类似于表格数据单元存储起来,对外只提供属性和方法。

继承:继承就是在类的基础之上加以扩展使现有的类属性更加全面,做的事情甚至更多(当然也可以完全不做任何修改,直接拿来使用)。

多态:动态的调用类型或接口方法,自动完成类型匹配。下面代码为证:

1、封装一个User类,作为基类

/**
*声明一个类似于java的类并添加其属性
*/
var User=function(){
var name='jack';//默认值
var gender=‘male’;//默认值
var age=20;//默认值
this.setName=function(name){
this.name=name;
};

this.getName=function(){

return this.name;

}
this.setGender=function(gender){
this.gender=gender;
};

this.getGender=function(){

return this.gender;

}
this.setAge=function(age){
this.age=age;
};

this.getAge=function(){

return this.age;

}

this.introduceMyself=function(){

alert('Hello!my name is '+this.getName()+",I'm "+this.getAge()+'years old!');

}
}

2、继承:创建User的子类

派生出子类Bluce并重写介绍自己的方法。

var Bluce=function(){

this.introduceMyself=function(){

alert('Bluce say hello to you!');

}

}

派生出子类Lisa并重写自己的介绍方法。

var Lisa=function(){

this.introduceMyself=function(){

alert('Lisa say hello to you!');

}

}

/**

*多态方法

*/

function sayHello(intro){

// 判断实参是否是User的一个实例

if (intro instanceof User) {

// 调用sayHello方法(编译器会自动获取被覆盖过的子类方法并调用)

intro.introduceMyself();

}

}

实现继承:

Bluce.prototype=new User();

Lisa.prototype=new User();

3、多态调用

var ub=new Bluce();

ub.setName("Bluce");

ub.setAge(23);

ub.setGender('male');

ub.sayHello(ub);

var ul=new Lisa();

ul.setName("Lisa");

ul.setAge(21);

ul.setGender('female');

ul.sayHello(ul);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: