javascript中类和继承
Js代码
<html>
<head>
<title> New Document </title>
<script src="js/prototype.js" type="text/javascript"></script>
</head>
<script tupe="text/javascript">
//javascript中自带的创建类的方法 用这种方法是不可引用 prototype.js否则会冲突
var People=function(){
this.name=""; //属性
this.getName=function(){
return "主人给我取名字了,我叫"+this.name+"。主人你希望我是个美女还是帅哥啊?"; //方法
}
this.say=function(){
return "主人你好!我是你的机器人,编号为:"+Person.getNum()+".给我取个名字吧"
}
this.易做图="man"
this.getSex=function(){
return "我是一个"+this.易做图;
}
}
People.num=0; //静态属性
People.getNum=function(){ //静态方法
People.num=People.num+1; //用People或this都可
return People.num;
}
//利用prototype.js来创建类
var Person = Class.create(); //通过Class.create方法创建空类
//添加非静态属性和方法
/**方法一:*/
Person.prototype = { //把方法定义到prototype中,注意,是通过initalize方法初始化类的属性
name:"name",
initialize: function(name) { //这是构造函数,必须实现且为非静态
alert("正在初始有参数对象对象……")
this.name = name;
},
say: function(message) {
return this.name + : + message;
}
};
/**方法二:
Object.extend(Person.prototype,{
initialize: function() {
alert("正在初始无参数对象……")
},
email:"lkujhn@qq.com",
getEmail:function (){
return this.email
}
})
*/
//添加静态属性和方法
//方法一:
Object.extend(Person, { //扩展一些静态属性, 方法
qq : "103430585",
getQq : function(){return this.qq;}
});
/**方法二:
Person.num=0;
Person.getNum=function() {
Person.num=Person.num+1; //用this.num也可
return this.name+":"+Person.num;
}
*/
//继承
var PersonSon=Class.create();
//初始化子类,如不初始化,将无法创建新对象(当子类的非静态方法继承了父类的非静态的方法时,构造函数也继承,因此可不初始化)
/**
Object.extend(PersonSon.prototype,{
name:"personson",
initialize:function(name){
this.name=name;
alert(this.name+"初始子类PersonSon………………")
}
})
**/
//继承形式1:(静态)继承父类的静态方法 ,继承后子类的该方法、属性依然是静态
Object.extend(PersonSon,Person);
//继承形式2:(非静态)继承父类的静态方法,继承后子类的该方法、属性为非静态
Object.extend(PersonSon.prototype,Person);
//继承形式3:(静态)继承父类的非静态方法,继承后子类的该方法、属性为静态
Object.extend(PersonSon,Person.prototype)
//继承形式4:(非静态)继承父类的非静态方法,继承后子类的该方法、属性为非静态
Object.extend(PersonSon.prototype,Person.prototype) //继承后子类的构造函数会被父类覆盖
function ceshi(){
var pp=new People(); //创建对象
//p.getNum() //调用错误
alert(People.getNum()) //调用静态方法
t(p.say()); //调用普通方法
pp.name="test" //改变对象的属性
alert(pp.getName());
alert(pp.getSex());
/**
var p=new Person("lj"); //创建对象
//调用非静态方法
alert(p.say("你好"));
alert(p.getEmail());
//调用静态方法
alert(Person.getQq());
alert(Person.getNum()); //静态方法中无法访问非静态属性,此方法中的this.name是为undefined
*/
var ps=new PersonSon("ljson");//创建子类
alert("调用的子类静态方法继承父类的静态方法:"+PersonSon.getQq());
alert("调用的子类非静态方法继承父类的静态方法:"+ps.getQq());
alert("调用的子类静态方法继承父类的非静态方法:"+PersonSon.say("子类静态方法"));
alert("调用的子类非静态方法继承父类的非静态方法:"+ps.say("子类非静态方法"));
alert("非静态属性(父类中该属性为静态):"+ps.qq);
alert("静态属性(父类中该属性为静态):" +PersonSon.qq)
alert("非静态属性(父类中该属性为非静态):" +ps.name)
alert("静态属性(父类中该属性为非静态):" +PersonSon.name)
}
</script>
<body>
<input type="button" value="机器人" onclick="ceshi()"/>
</body>
</html>
补充:web前端 , JavaScript ,