JavaScript面向對象


    開始學習面向對象了,JavaScript面向對象和Perl的面向對象都是有些怪異,但也好理解,Perl是通過子程序來創建一個構造函數,而JavaScript是通過一個方法(function)來創建一個類,而且,你只是一般調用這個方法,那它就是一個函數,而new一個時,它就是一個類了

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Js1.html</title>
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
   <!-- <script type="text/javascript">-->
   <script language="javascript" src="myjs.js"></script>
    <script language="javascript">

         //catx
         function catx(){
         
         }
         //創建對象
         var cat = new catx();
         cat.name="小白";
         cat.age=3;
         document.write(cat.name+cat.age+"<br />");
            //另一種對象訪問的方式cat['name']=cat.name
           document.write(cat['name']+cat.age+"xx <br />");
         if (cat instanceof catx){
           document.write("cat 是catx的對象 <br />");
         }
         
         if (cat.constructor == catx){
           document.write("cat11 是catx的對象 <br />");
         }
         
          document.write(cat.constructor+"catx的構造函數 <br />");
          
          //帶var與不帶var的區別,var相當於定義了一個全局變量
          var dlhx = 90;
          function testx(){
               //在函數中,如果你不帶var,則表示使用全局變量dlhx
               //如果你帶上var,表示testx()中,定義一個新的變量dlhx
              var dlhx = 80;
          }
          document.write(dlhx+"dlhx <br />");
          
          function person(){}
          
          //因爲對象a,b都指向同一個地址,所以,只要改變了一個,另一個也會變
          var a = new person();
          a.age=10;
          a.name='小華';
          var b = a;
          document.write(b.age+"對象引用 <br />");
          b.name='小燕子';
          document.write(b.name+"  "+a.name+"對象引用 <br />");
          //把b的對象對a的引用,斷開了,就是對象沒有了,刪掉對象,b.name就訪問不到值了
          b=null;
          delete a.age;//刪掉對象a的屬性
        document.write("++++++++++++++++++++++++++++++++ <br />");   
          function pox(){
          
            var x = 1; //用var代表私有,外面不能直接訪問,只能在內部用
            var y = 'kk';
            this.m=22;//用this代表公有,外面可以直接訪問
            this.show=function (){
               document.write(x+"類中公有方法 <br />");
               show2()//可以在先調公開方法,公開方法中再調私有方法
            }
            
            function show2(){    
                document.write(x+"類中私有方法,外面不可調用 <br />");
            }
          }
          var a = new pox();
            document.write(a.m+" <br />");
            a.show();
            // a.show2();
                     
             //這裏會輸出90,因爲test1這時是一個函數,而this的對象代表window
             //
             function test1(){
             
                 document.write(this.v+" mm <br />"); 
             }
             
             var v = 100;
             //test1(); // =window.test()
             
             
             function xfg(){
                this.v = 110;
             
             }
            
             var k1 = new xfg();
             //k1.test1(); 

              //這裏會輸出100,因爲test1這時是一個函數,而this的對象代表window
             //誰調用這個它,誰就代表它是this(那個對象的實例調用了this,那這個this
             //就代表了這個實例函數)
             
             //this只能在類內部中或類的方法中使用,不能這時的this就不是類了,而
             //可能是window了
             function test1(){             
                 document.write(this.v+" mm xx <br />"); 
             }
             
             var v = 100;
             test1(); // =window.test()
             document.write(this.v+" mm <br />");
             
             
             function xfg(){
                
                this.show = function(){          
                     document.write(this.vx+" mm <br />");
                
                }
             
             }
            
             var k1 = new xfg();
             k1.vx = 'hi';
             k1.show();
             document.write("++++++++++++++++++++++ <br />");
             
  function hans(name,age){
                this.name=name;
                this.age=age;
                this.show = function(){               
                     document.write(this.name+" name <br />");
                
                }
               
                this.add = function(){
                   var tmp = 0;
                   for (var i =0;i <= 10;i++){
                       tmp+=i;
                   }
                   return tmp;
                }
                //計算從小加到n
                this.addx = function(n){
                   var tmp = 0;
                   for (var i =0;i <= n;i++){
                       tmp+=i;
                   }
                   return tmp;
                }                
             }
            
             var k1x = new hans('dlh',20); 
             k1x.show();
             var x = k1x.add();            
             document.write(x+" xx <br />");
             document.write(k1x.addx(100)+" addx <br />");
             
             function tmp(){                            
                 document.write(" 爲對象動態增加一個方法,任何對象都可以指向這個方法 <br />");              
             }
             //爲對象動態增加一個方法,這裏是abc指向tmp的方法(引用)
              k1x.abc = tmp;
              k1x.abc();
              
              //只能是abcx的對象引用這個方法
              k1x.abcx = function tmpx(){  
                          
               document.write(" 爲對象動態增加一個方法,且只能爲當前調用它的對象增加,其它的不行 <br />");
                
             }
             
             k1x.abcx();
             //這裏會把tmp的函數打印出來,因爲是tmp,而沒有帶tmp()
             document.write(tmp+" tmp === <br />");
                                     
     </script>
  </body>
</html> 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章