javascript 同时支持重写继承求解?
原型继承实现方式:
function Circle(radius) { //定义父类Circle
this.radius = radius;
}
Circle.prototype.area = function() { //定义父类的方法area计算面积
return this.radius * this.radius * 3.14;
}
function PositionCircle(x,y,radius) { //定义类PositionCircle
this.x = x; //属性横坐标
this.y = y; //属性纵坐标
Circle.call(this,radius); //调用父类的方法,相当于调用this.Circle(radius),设置PositionCircle类的
//radius属性
}
PositionCircle.prototype = new Circle(); //设置PositionCircle的父类为Circle类
var pc = new PositionCircle(1,2,1);
alert(pc.area()); //3.14
//PositionCircle类的area方法继承自Circle类,而Circle类的
//area方法又继承自它的prototype属性对应的prototype对象
alert(pc.radius); //1 PositionCircle类的radius属性继承自Circle类
/*
注意:在前面我们设置PositionCircle类的prototype属性指向了一个Circle对象,
因此pc的prototype属性继承了Circle对象的prototype属性,而Circle对象的constructor属
性(即Circle对象对应的prototype对象的constructor属性)是指向Circle的,所以此处弹出
的是Circ.
*/
alert(pc.constructor); //Circle
/*为此,我们在设计好了类的继承关系后,还要设置子类的constructor属性,否则它会指向父类
的constructor属性
*/
PositionCircle.prototype.constructor = PositionCircle
alert(pc.constructor); //PositionCircle
原型实现重写:
function BaseObj(v1){this.value=v1};
function Obj2(v2){this.value="2222222" ,this.oth = v2};
BaseObj.prototype.fun = function (){alert(this.value);}
Obj2.prototype = new BaseObj();
o2 = new Obj2("22222.value");
o2.fun();
//子类重写父类的fun方法
Obj2.prototype.fun = function (){Obj2.prototype.constructor.prototype.fun.call(this);}
如果想同时实现继承,重写,红色的代码出现了矛盾,请问如何解决?
(实现继承最后是要把子类的prototype.constructor指向其子类本身,而要想实现重写,子类又要通过prototype.constructor访问到父类)
function Circle(radius) { //定义父类Circle
this.radius = radius;
}
Circle.prototype.area = function() { //定义父类的方法area计算面积
return this.radius * this.radius * 3.14;
}
function PositionCircle(x,y,radius) { //定义类PositionCircle
this.x = x; //属性横坐标
this.y = y; //属性纵坐标
Circle.call(this,radius); //调用父类的方法,相当于调用this.Circle(radius),设置PositionCircle类的
//radius属性
}
PositionCircle.prototype = new Circle(); //设置PositionCircle的父类为Circle类
var pc = new PositionCircle(1,2,1);
alert(pc.area()); //3.14
//PositionCircle类的area方法继承自Circle类,而Circle类的
//area方法又继承自它的prototype属性对应的prototype对象
alert(pc.radius); //1 PositionCircle类的radius属性继承自Circle类
/*
注意:在前面我们设置PositionCircle类的prototype属性指向了一个Circle对象,
因此pc的prototype属性继承了Circle对象的prototype属性,而Circle对象的constructor属
性(即Circle对象对应的prototype对象的constructor属性)是指向Circle的,所以此处弹出
的是Circ.
*/
alert(pc.constructor); //Circle
/*为此,我们在设计好了类的继承关系后,还要设置子类的constructor属性,否则它会指向父类
的constructor属性
*/
PositionCircle.prototype.constructor = PositionCircle
alert(pc.constructor); //PositionCircle
原型实现重写:
function BaseObj(v1){this.value=v1};
function Obj2(v2){this.value="2222222" ,this.oth = v2};
BaseObj.prototype.fun = function (){alert(this.value);}
Obj2.prototype = new BaseObj();
o2 = new Obj2("22222.value");
o2.fun();
//子类重写父类的fun方法
Obj2.prototype.fun = function (){Obj2.prototype.constructor.prototype.fun.call(this);}
如果想同时实现继承,重写,红色的代码出现了矛盾,请问如何解决?
(实现继承最后是要把子类的prototype.constructor指向其子类本身,而要想实现重写,子类又要通过prototype.constructor访问到父类)
...全文
相关推荐
如何重写继承HttpServlet的类
如何重写继承HttpServlet类 1、在 src ->main 中创建一个Directory(标记目录为Source Root) 2、在创建好的目录下建包:cn.edu.mju.projrct2.comtroller webapp是存放各种图片、视频等jsp资源的根路径,标记为Resources Root(浏览器可以直接访问,如果存放在WEB-INF中是需要间接访问的) 3、在创建好的包下建类:LoginController 4、在 mvnrepository.com网站中搜索 HttpServlet-api ,将javax-servlet-api插件包中的代码复制到pom.xm
js怎么覆盖原有方法实现重写
主要介绍了js怎么覆盖原有方法实现重写,需要的朋友可以参考下
Classify.js:用于经典对象继承的 JavaScript 库
分类.js 用于经典对象继承的 JavaScript 库
更好的类类继承支持JavaScript库
提供库函数,这些函数避免了内置JavaScript继承的某些缺点。
javascript继承5种方式,详细的介绍了js的对象化
javascript毫无疑问是面向对象的,可日常使用中,怎么实现类,对象,继承这种高级语言特性呢.看完这个文档就很清楚啦,很不错的东西,适合有一丁点Javascript基础的童鞋


