javascript面向对象技术基础(五)—感

 

  1. function Circle(radius) {  //定义父类Circle  
  2.     this.radius = radius;  
  3. }  
  4. Circle.prototype.area = function() { //定义父类的方法area计算面积  
  5.     return this.radius * this.radius * 3.14;  
  6. }  
  7.   
  8. function PositionCircle(x,y,radius) { //定义类PositionCircle  
  9.     this.x = x;                    //属性横坐标  
  10.     this.y = y;                    //属性纵坐标  
  11.     Circle.call(this,radius);      //调用父类的方法,相当于调用this.Circle(radius),设置PositionCircle类的  
  12.                                    //radius属性  
  13. }  

  14. PositionCircle.prototype = new Circle(); //设置PositionCircle的父类为Circle类  
  15.   
  16. var pc = new PositionCircle(1,2,1);  
  17. alert(pc.area());  //3.14  
  18.                    //PositionCircle类的area方法继承自Circle类,而Circle类的  
  19.                    //area方法又继承自它的prototype属性对应的prototype对象  
  20. alert(pc.radius); //1  PositionCircle类的radius属性继承自Circle类  
  21.   
  22. /* 
  23. 注意:在前面我们设置PositionCircle类的prototype属性指向了一个Circle对象, 
  24. 因此pc的prototype属性继承了Circle对象的prototype属性,而Circle对象的constructor属 
  25. 性(即Circle对象对应的prototype对象的constructor属性)是指向Circle的,所以此处弹出 
  26. 的是Circ. 
  27. */  
  28. alert(pc.constructor); //Circle      
  29.   
  30. /*为此,我们在设计好了类的继承关系后,还要设置子类的constructor属性,否则它会指向父类 
  31. 的constructor属性 
  32. */  
  33. PositionCircle.prototype.constructor = PositionCircle  
  34. alert(pc.constructor);  //PositionCircle  
感1:将第11句提到方法体首位,可以防止Circle属性的覆盖
感2:PositionCircle.prototype =  new  Circle();  可以修改为:
PositionCircle.prototype = Circle.prototype();但不知道这样做会有什么影响

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值