Javascript中并没有明确提出一个类如何从另一个类中继承其属性和方法,但我们还是有办法模拟的:
//在超类Object中定义继承的方法
//子类都将使用extends来说明它继承了谁
Object.prototype.extends = function(from_obj,to_obj){
var temp;
for(temp in from_obj){
to_obj[temp] = from_obj[temp];
}
}
//为Class类定义一个构造函数的方法
//这个构造函数也定义了类自身,同时还定义了一个空的原型对象
function Class(){
this.x;//创建属性x但初始化,值为undefined
this.y = "yy";//创建属性y并初始化
this.add = function(){ return this.x + this.y;};//创建add方法
}
//为Class1类定义一个构造函数的方法
function Class1(){
this.extends(new Class(),this);//继承Calss
this.add = function(){ return this.x + this.z;};//覆盖了Class中的add方法
this.z = "zz";//创建属性z并初始化
this.minus = function(m,n){return m-n;};//创建minus方法
}
//为Class2类定义一个构造函数的方法
function Class2(a){
this.extends(new Class1(),this);//继承Calss1
//模拟Java一个类多个构造函数。如Array()、Array(3)、Array("aa","bb","cc")都可创建数组
if(a==undefined){
this.a = "aa";//创建属性z赋于默认值
}else{
this.a = a;//创建属性z并赋值
}
}
下边使用构造函数创建上边类的实例:
//使用构造函数创建Class类实例one
var one = new Class();
document.write(one.x + "<br/>" + one.y + "<br/>" + one.add() + "<br/><br/>");
//使用构造函数创建Class1类实例two
var two = new Class1();
two.x = "xx";
document.write(two.x + "<br/>" + two.y + "<br/>" + two.z + "<br/>" + two.add() + "<br/>" + two.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例three
var three = new Class2();
three.x = "xx";
document.write(three.x + "<br/>" + three.y + "<br/>" + three.z + "<br/>" + three.a + "<br/>" + three.add() + "<br/>" + three.minus(5,3) + "<br/><br/>");
//使用构造函数创建Class2类实例four
var four = new Class2("mzwu");
four.x = "xx";
document.write(four.x + "<br/>" + four.y + "<br/>" + four.z + "<br/>" + four.a + "<br/>" + four.add() + "<br/>" + four.minus(5,3) + "<br/><br/>");
"构造函数定义了类自身,同时还定义了一个空的原型对象",你可以运行下边的代码证明:
Class2.prototype.constructor == Class2;//结果为true
var names = "";
for(var name in Class2.prototype) names += name;//结果只有extends
评论(0)
暂无评论。