AJAX——JavaScript面向对象

都说AJAX是很多旧知识的重新融合,大大提高了用户体验度。而除了上篇讲到了XMLHttpRequest对象为其核心外,JavaScript脚本语言,在其中也占据着非同小可的地位。这篇博客就主要写一下JavaScript在当今流行的开发方式面向对象的基础运用。


        首先看一下,JavaScript之对象:

        对象也就是我们面向对象中类的实例化,我们在三层开发中通过编写类,并将其实例化成对象,来完成各种工作的。下边通过几个例子来看看JavaScript中对象的创建,以及添加属性和方法。大家注意看注释的内容:


[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;"><script language="javascript" type="text/javascript">  
  2.   
  3.     //一,创建简单对象  
  4.     //1,通过new Object()  
  5.     var obj1=new Object();  
  6.     //2,通过{}  
  7.     var obj2={};  
  8.       
  9.     //二,简单对象属性的添加  
  10.     obj1.num=1;  
  11.     obj1.str="String";  
  12.     obj1.hello=function(){  
  13.         alert("hello");  
  14.     }  
  15.     obj2.obj=obj1;  
  16.        
  17.     //三,属性的访问,1,使用操作符  
  18.     alert(obj2.obj.num);  
  19.     alert(obj2.obj.str);  
  20.     obj1.hello();  
  21.       
  22.     //四,属性的访问:2,使用{}操作  
  23.     alert(obj2["obj"]["num"]);  
  24.     alert(obj2["obj"]["str"]);  
  25.     obj1["hello"]();  
  26.       
  27.     //五,通过对象直接量的方式定义包含属性的对象,利用{}  
  28.     var obj3={  
  29.         num:1,  
  30.         str:"String",  
  31.         hello:function(){  
  32.             alert("hello");  
  33.         }  
  34.     }  
  35. </script>  
  36. </span>  



             二,当然,面向对象中,用的更多还是类的各种属性,方法,各种性质等。

                  1,先看一下简单类的创建:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">        //类的定义方法1,  
  2.         var Teacher1=function(){  
  3.           
  4.         }  
  5.         //类的定义方法2,  
  6.         function Teacher2(){  
  7.           
  8.         }  
  9.           
  10.         function ooTest(){  
  11.             //实例化类  
  12.             var teacher=new Teacher1();  
  13.         }  
  14. </span>  



         2,类的公有属性和公有方法的简单添加:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">        //定义公有的属性和方法  
  2.         var Book=function(name){  
  3.             //定义公有属性  
  4.             this.name=name;  
  5.             //定义公有方法  
  6.             this.getName=function(){  
  7.                 return this.name;  
  8.             },  
  9.             this.setName=function(nname){  
  10.                 this.name=nname;  
  11.             }  
  12.         }  
  13. </span>  


       

             3,这里再看一下在原型对象上定义公有方法:

                 原型对象:在JavaScript定义的每个类上都有一个Prototype(原型)对象,这个对象类似母体,其他此类的实例化对象可以继承来自原型对象上的方法和属性。更加详细的理解还得看后边:

                  

     定义原型对象,并添加属性和方法:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">//function上边都有一个原型对象        var proto = Book.prototype;  
  2.         proto.str = "原型的属性";  
  3.         proto.hello = function () {  
  4.             alert("hello");  
  5.         }  
  6.         var book1 = new Book();  
  7.         alert(book1.str);  
  8. </span>  


    但是一些公有属性都是各自对象有自己的,例如,你有你的名字,我有我的名字。但是方法可以是相同的,例如,我们同学都有获得名字的方法,设置名字的方法。所以一般我们在原型对象上设置公有方法,而不设置公有属性,防止出错,例如:


[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;"//更好的定义方法,不再原型对象上定义公有属性        //原因:同一个类的不同对象的属性可以是不同的值,不能集中在原型对象上  
  2.         //优先访问对象上的属性,如果没有则访问原型对象上的属性  
  3.         var Book = function () {  
  4.             this.name = name;  
  5.             //只在原型对象定义一次,提高效率  
  6.             if(typeof Book. _init == "undefined"){  
  7.                 Book.prototype.setName = function (nname) {  
  8.                     Book.prototype.name = nname;  
  9.                 }  
  10.                 Book.prototype.getName = function () {  
  11.                     return this.name;  
  12.                 }  
  13.             }  
  14.             Book._init=true;  
  15.         }  
  16. </span>  

而这种方法相对于上边哪种也是非常高效的,主要体现在空间的利用率上:看这张图非常形象生动:



    三,好,类的最基本的操作时完成了,下边看看一些私有属性,方法,静态属性、方法的定义:

              私有属性,方法的定义:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">  //一,私有方法的定义,利用了局部变量和方法           Book.prototype.getCount = function () {  
  2.                addCount();  
  3.                return count;  
  4.            }  
  5.   
  6.                 //利用局部变量来模拟私有属性和方法  
  7.          var count = 0;  
  8.          var addCount = function () {  
  9.              count++;  
  10.          }  
  11.               
  12.   
  13.               //二,一个单独的对象,期望拥有一些私有的信息  
  14.         var priObj1 = new function () {  
  15.             var priname = "刘";  
  16.             this.getName = function () {  
  17.                 return priname;  
  18.             }  
  19.             this.setName = function (nname) {  
  20.                 priname = nname;  
  21.             }  
  22.         }  
  23.           
  24.         //三,利用匿名方法直接调用的方式,来实现一个对象拥有私有的信息  
  25.         var priObj=(function(name){  
  26.             var priname = name;//私有属性  
  27.             return {  
  28.                 getName: function () {  
  29.                     return priname;  
  30.                 },  
  31.                 setName: function (nname) {  
  32.                     priname = nname;  
  33.                 }  
  34.             };  
  35.         })("刘")  
  36. </span>  


     静态属性和方法的定义:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;">  //一,静态属性和方法的定义        //定义静态的属性,利用static关键字  
  2.         Book.staticValue = 1111;  
  3.         //定义静态的方法  
  4.         Book.changeValue = function () {  
  5.             Book.staticValue++;  
  6.         }  
  7. </span>  



       四,对于面向对象中的继承和接口这里也来模拟一下:

[javascript]  view plain  copy
 print ?
  1. <span style="font-size:18px;"//1,模拟父子类的继承        Function.prototype.extend = function (parent) {  
  2.             this.prototype = parent;  
  3.             /* 
  4.                 一种复杂的继承方法编写 
  5.                 for(var proName in parent.prototype){ 
  6.                     this.prototype[proName]=parent.prototype[proName]; 
  7.                 } 
  8.             */  
  9.         }  
  10.         //通过编写模拟继承方法,使Book为Teacher1的父类  
  11.         //当然也可以进行方法的重写  
  12.         Teacher1.extend(Book);  
  13.   
  14.         //2,模拟接口及类实现接口  
  15.         //定义接口和类一样,只不过方法没有实现而已  
  16.         var Inter = function () {  
  17.   
  18.         }  
  19.         //编写方法为undefined,及模拟接口  
  20.         Inter.prototype.test = undefined;  
  21.         //实现接口  
  22.         Teacher1.extend(Inter);  
  23. </span>  

       综上为利用JavaScript编写面向对象中对象、类的一些属性和方法,继承,接口等的模拟,都是最基础的,需要将JavaScript的面向对象编程和C#的面向对象编程进行比较来学习,其实很多相似的东西,JavaScript都是模仿他们的来的吧!继续学习中……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值