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>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值