javascript 继承、子类化

javascript实现面向对象时,并没有类似于java、c++的严格的类层次结构。所以想实现继承,也不能通过extend等方式实现。不过javascript提供的原型链表机制可以很好的完成这一工作,实现继承机制。

继承的思想宽松点说就是子类继承父类的属性和方法,并且隐藏父类的同名属性或方法。在javascript中实现该机制并不难,只不过比较粗糙一点,看下面的例子。

   1:  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   2:  <html xmlns="http://www.w3.org/1999/xhtml">
   3:   <head>
   4:    <title>javascript子类化</title>
   5:    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   6:    <meta name="generator" content="Ntcsoft" />
   7:    <meta name="author" content="MrZhou" />
   8:    <meta name="keywords" content="" />
   9:    <meta name="description" content="" />
  10:   </head>
  11:   
  12:   <body>
  13:   
  14:    <script type="text/javascript">
  15:    //父类构造函数
  16:      function fa (){
  17:          var privateFs = "private father String";//私有成员
  18:   
  19:          this.getPrivateFs = function(){ //私有成员的get方法
  20:              return privateFs;
  21:          }
  22:          this.setPrivateFs = function( str ){//私有成员的set方法
  23:              privateFs = str;
  24:          }
  25:   
  26:          this.fs = 'father string';
  27:          this.ff=function(){
  28:              alert('father function');
  29:          }
  30:      }
  31:      //子类构造函数
  32:      function son(){
  33:          this.ss = 'son string';
  34:          this.sf = function(){
  35:              alert('son function');
  36:          }
  37:      }
  38:      //实现子类继承父类,这里实际上是让构造函数son的原型对象指向fa函数的实例,这样,son的prototype属性就拥有了fa实例对象的所有属性和方法,
而son的实例会同时拥有son和fa类的this指定的属性和方法。
  39:      son.prototype = new fa();
  40:   
  41:      //通过子类构造函数生成实例对象。
  42:      var newBoy = new son();
  43:      //alert(newBoy.fs);//father string
  44:      //alert(newBoy.ss)//son string
  45:   
  46:      /*(这时候弹出的是fa函数的内容而不是son函数的内容)
  47:      不过这样做有几个缺点:这样做实际上是干掉了son的prototype,随之也干掉了son的prototype对象的constructor属性。不过我们也有解决办法。*/
  48:      //alert(son.prototype.constructor)
  49:   
  50:      //son.prototype.constructor = son;
  51:      //alert(son.prototype.constructor); 
  52:   
  53:      //通过get,set方法读写父类的私有属性
  54:      newBoy.setPrivateFs("123");
  55:      alert(newBoy.getPrivateFs());
  56:    </script>
  57:   
  58:   </body>
  59:  </html>
posted @ 2011-05-09 15:44  像阳光一样  阅读(544)  评论(0编辑  收藏  举报