首页 > 代码库 > JavaScript面向对象编程(8)使用中间函数
JavaScript面向对象编程(8)使用中间函数
上一讲我们提出一个很好的思路,将一个类的可复用部分全部定义在prototype中,这样子类继承的时候可以很方便地通过prototype来继承;
但是也带来一个问题就是子类在重写prototype中的属性时会改变所有实例的属性,这是因为父类和子类实例都共享同一个prototype;
怎么解决呢?思路就是利用一个中间函数,具体请看代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>临时函数F</title> </head> <body> <script type="text/javascript"> function Shape(){ } Shape.prototype.name = 'shape'; Shape.prototype.toString = function() {return this.name;}; function TwoDShape(){ } //用中间函数先继承基类 var F = function(){} F.prototype=Shape.prototype; //子类继承中间函数 TwoDShape.prototype = new F(); TwoDShape.prototype.constructor = TwoDShape; //这是真正的重写 TwoDShape.prototype.name = '2D shape'; function Triangle(side, height) { this.side = side; this.height = height; this.getArea = function(){return this.side * this.height / 2;}; } var F = function(){} F.prototype=TwoDShape.prototype; Triangle.prototype = new F(); Triangle.prototype.constructor = Triangle; //重写 Triangle.prototype.name="Triangle"; var my = new Triangle(5, 10); /* alert(my.getArea()); alert(my.toString());//自己没有toString方法,继承而来 alert(my.constructor); alert(my instanceof TwoDShape);//有继承的特性 alert(my instanceof Shape); */ alert(my.name); var shape = new Shape(); alert(shape.name);//正常了 </script> </body> </html>
JavaScript面向对象编程(8)使用中间函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。