1--理解并学习javascript中的面向对象(OOP)

来源:互联网 发布:linux下utf8转gbk 编辑:程序博客网 时间:2024/06/11 01:16

1.下面部分的代码,将是从目前十分流行的JSON数据格式以及javascript数组,来一步步像大家阐述javascript中的面向对象思想。

[html] view plain copy
  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>JSON数据格式</title>  
  5.     <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>  
  6.      <script type="text/javascript">  
  7.          function jsonTest() {  
  8.              //定义json数据格式 -- 以文本的形式存在,转换为javascript对象或者数组  
  9.          //对象中可以包含数组,数组中也可以包含对象,可以存在相互嵌套的关系  
  10.              var json1 = "[1,2,{a:123,b:'str',c:[100,200]}]";//数组形式  
  11.              var parsejson1 = eval(json1);//将纯文本的内容转换为javascript原生支持的json  
  12.              var json2 = "{name:'dinglang',age:21,hobby:['武术','电影']}";//对象形式  
  13.              //var parsejson2 = eval(json2); //这样直接转换会报错   
  14.              //当被eval()转换的纯文本json数据为对象形式时,需要在前后加上"()"  
  15.              var parsejson2 = eval("(" + json2 + ")"); //这样转换就可以了  
  16.               
  17.              alert("");  
  18.          }  
  19.   
  20.   
  21.   
  22.   
  23.          //探索一下JSON这种数据格式的由来  
  24.   
  25.          //1.首先是回顾一下javascript数组的相关知识  
  26.          function arrTest() {  
  27.             // 1)数组的基本定义与赋值  
  28.              var arrOne = new Array(); //第一种创建方法  
  29.              var arrTwo =  new Array(0,1,2);//第二种创建方式(创建的时候就给数组赋初始值)  
  30.              var arrThree = []; //第三种方式 --定义一个空数组  
  31.              var arrFour = [1, 2, 3, 5]; //第四种方式--定义一个数组,并给数组赋初始值  
  32.              //创建多维数组  
  33.              var arrFive = new Array(1, new Array(2, 3), 4, 5); //创建一个多维数组(嵌套的)  
  34.              var arrSix = [1, [2, 3], 4];//创建一个多维数组  
  35.              // 2)数组的基本操作(数组是javascript语言中一种很重要的数据结构)  
  36.              alert(arrSix[1]);  //通过数组下标,来获取数组中对应的某个元素  
  37.              arrSix[0] = 100; //给数组中下标对应的元素赋值(如果该元素还未创建,就创建该元素并赋值)  
  38.              arrSix[99] = 888; //arrSix中会自动创建下标为99的元素,并给其赋值 --javascript中数组的长度是可以随时改变的  
  39.              // 3)javascript当中数组常用的一些方法  
  40.              //concat方法的使用 --可以做数组的连接或者合并,原数组的内容不变,将返回一个新的数组对象  
  41.              var arrFour1 = arrFour.concat(101, 102, 103);//第一种连接方式  
  42.              var arrFour2 = arrFour.concat([104, 105]);//第二种连接方式  
  43.              var arrFour3 = arrFour.concat(arrFour1); //将已经定义的数组进行连接  
  44.              //join方法--将数组中元素,按照指定的分隔符连接成字符串输出,原数组的内容不变  
  45.              //slice方法--返回当前数组中的子数组,原数组中的内容不会改变  
  46.              //push/pop  在数组的尾端追加(push)或弹出(pop),将会修改原数组的内容  
  47.              arrFive.push(107);//在数组尾部追加一个元素  
  48.              arrFive.pop(); //弹出数组中最后一个元素  
  49.              //在数组的开头追加(shift)和unshift(弹出)操作  
  50.              arrFive.reverse(); //反转数组中的元素  
  51.              arrFive.sort(); //按照字母是顺序,对数组中的元素进行升序排列  
  52.              arrFive.sort(function (a, b) {  
  53.                  return a - b;  
  54.              }); //按照数值大小,进行升序排列。如果返回的是负值,那么a就会出现在b的前面  
  55.              arrFive.sort(function (a, b) {  
  56.                  return b - a;  
  57.              }); //按照降序排列  
  58.              //splice  可以删除数组中一部分元素,并把部分元素进行返回。也可以在指定位置添加元素  
  59.              var arrSplice1 = arrSix.splice(3, 2); //从下标为3的元素开始删除,删除2个元素  
  60.              var arrSplice2 = arrSix.splice(4); //从下标为4的元素开始删除,一直删除到数组的末尾  
  61.              arrSix.splice(1, 0, 401, 402); //在下标为1的元素前面,插入401,402这两个元素  
  62.              arrSix.splice(1, 0[188, 189]);//在下标为1的元素前面,插入[188,199]  
  63.          }  
  64.            
  65.          //2.javascript中的对象的定义、使用  
  66.          var obj1 = new Object(); //定义一个对象  
  67.          var obj2 = {};  //使用"{}"也可以定义一个对象  
  68.          //给对象增加属性  
  69.          obj1.num = 1;  
  70.          obj1.str = "string";  
  71.          obj1.sayHello = function () {  
  72.              alert("Hello");  
  73.          }  
  74.          obj2.srcObj = obj1; //将obj1对象作为obj2对象的属性  
  75.   
  76.          //属性的访问 --第一种访问方式  
  77.          obj1.num; //也可以这么访问  obj2.srcObj.num;  
  78.          obj1.str;           //obj2.srcObj.str;  
  79.          obj1.sayHello();   //obj2.srcObj.sayHello();  
  80.   
  81.          //属性的访问 --第二种方式  
  82.          obj1["num"];        //obj2["srcObj"]["num"];  
  83.          obj1["str"];        //obj2["srcObj"]["str"];  
  84.          obj1["sayHello"](); //obj2["srcObj"]["sayHello"]();  
  85.   
  86.          //通过对象直接量的方式,定义和调用对象、属性  
  87.          var obj3 = {  
  88.              num: 1,  
  89.              str: "string",  
  90.              sayHello: function () {  
  91.                  alert('Hello');  
  92.              }  
  93.          }  
  94.          //访问方式同上,例如  
  95.          obj3.num; //obj3["num"];  
  96.   
  97.          //看清楚了吗?这就是javascript中JSON数据格式的原型  
  98.   
  99.   
  100.   
  101.          //下面来深入讲解javascript语言的面向对象特性  
  102.          //javascript中定义类,需要用function来模拟  
  103.   
  104. //         function Teacher(){  
  105. //           
  106.          //         }   
  107.          //建议使用下面这种方法来创建一个类,以便将类和函数区分开来(建议定义类时首字母大写)  
  108.          var Teacher = function () {  
  109.   
  110.          }  
  111.          //定义一个book类,这里的function还承担了构造函数的工作  
  112.          //在使用new操作符创建Book对象时,这个funtion里面的代码将会被执行一次  
  113.          //this关键字代表的是当前对象  
  114.          function Book(name) {  
  115.          //定义公有的属性  
  116.              this.name = name;  
  117.              //定义公有的函数  
  118.              this.getName = function () {  
  119.                  return this.name;  
  120.              }  
  121.              this.setName = function (nname) {  
  122.                  this.name = nname;  
  123.              }  
  124.          }  
  125.          function ooTest() {  
  126.              var tech = new Teacher();  
  127.              alert(tech instanceof Teacher); // instanceof函数,表示是否属于某对象类型  
  128.              var book1 = new Book("C#");//这里的new操作相当于先创建了一个简单对象,调用了类的构造函数  
  129.              var book2 = new Book("JAVA");  
  130.              alert(book1.name);//弹出C#  
  131.              alert(book2.name);//弹出JAVA  
  132.              book1.setName(".NET");  
  133.              alert(book1.name);//弹出.NET  
  134.              alert(book2.name); //弹出JAVA  
  135.   
  136.              //function上面都有一个原型对象 --prototype  
  137.              var proto = Book.prototype;  
  138.              proto.str = "string";  
  139.              proto.hello = function () {  
  140.                  alert("Hello");  
  141.              }  
  142.              //给原型定义了属性和方法后,拥有这个原型对象的function模拟出来的类,也具有该属性和方法  
  143.              alert(book1.str); //弹出string  
  144.              book1.hello(); //弹出hello  
  145.   
  146.          }  
  147.            
  148.      </script>  
  149. </head>  
  150. <body>  
  151. <input  type="button" value="测试json" onclick="jsonTest()"/>  
  152. </body>  
  153. </html>  

未完待续。。。。。

原创粉丝点击