資料整理

           

          JSON 入門與JavaScript提高(原創)

          原文 Quick guide to somewhat advanced JavaScript tour of some OO features
          出處 http://www.sergiopereira.com/articles/advjs.html


          什么是JSON? JavaScript Object Notation -------javascript對象符號,一個Ajax中砰然出現的新話題.其實它就是javascript中申明對象的方法。讓我們來看一個示例
          var?myPet?=?{?
          ???color:?'black',?
          ???leg_count:?
          4,?
          ???communicate:?
          function(repeatCount){?
          for(i=0;i<repeatCount;i++)?alert('Woof!');}
          ?
          }
          ;

          這里我們就創建了一個對象引用,這個對象包含了2個屬性(color,leg_count)和一個方法(communicate),
          在myPet對象的列表中不難看出,這些屬性和方法之間都是用逗號","分隔開來的。屬性很好理解,而方法的創建則是由一個匿名function標記的。

          在該對象被創建以后并且以myPet變量聲明了以后我們就可以這樣使用了:
          alert('my?pet?is?'?+?myPet.color);
          alert('my?pet?has?'?
          +?myPet.legCount?+?'?legs');
          //if?you?are?a?dog,?bark?three?times:
          myPet.communicate(3);

          大家可以看到,JSON可以漂亮地應用到javascript中任何一個地方,作為function參數、返回值、服務器響應...

          你理解了嗎?function同樣也是一個對象。
          ---------------------------------------------------------------
          或許JS程序員中有些人從來就不這么認為,但是function確實也是一個Object。下面我們可以做個實驗來驗證一下,將你的function給你的另一個function做為參數傳遞,就傳一個String一樣。
          var?myDog?=?{
          ????bark:?
          function(){
          ????????alert('Woof
          !');
          ????}

          }
          ;

          var?myCat?=?{
          ????meow:?
          function(){
          ????????alert('I?am?a?lazy?cat.?I?will?not?meow?
          for?you.');
          ????}

          }
          ;
          ?
          function?annoyThePet(petFunction){
          ????
          //let's?see?what?the?pet?can?do
          ????petFunction();
          }


          //annoy?the?dog:
          annoyThePet(myDog.bark);
          //annoy?the?cat:
          annoyThePet(myCat.meow);

          在這里我們傳遞了myDog.bark和myCat.meow給annoyThePet。注意它們后面都沒有帶括號"()",如果不這樣做的話我們傳遞的將不是"方法",而是該方法的返回值(在此例中為"Undefine")。

          如果你想我的懶貓學狗狗叫,你可以這樣做:
          myCat.meow?=?myDog.bark;
          myCat.meow();?
          //alerts?'Woof!'

          ?
          Arrays, items 和對象成員object members
          請看下面2行

          var?a?=?new?Array();
          var?b?=?[];

          ?

          你可以在array中添加items:

          var?a?=?['first',?'second',?'third'];
          var?v1?=?a[0];
          var?v2?=?a[1];
          var?v3?=?a[2];

          但是你在聲明時對索引不做數量限制,你將可以通過它的名字訪問這個JS對象中的任何成員,就象這樣,創建一個空的對象,然后就可以不停地添加了:

          var?obj?=?{};?//new,?empty?object
          obj['member_1']?=?'this?is?the?member?value';
          obj['flag_2']?
          =?false;
          obj['some_function']?
          =?function(){?/*?do?something?*/};
          ????????????
          等價于:

          var?obj?=?{
          ????member_1:'
          this?is?the?member?value',
          ????flag_2:?
          false,
          ????some_function:?
          function(){?/*?do?something?*/}
          }
          ;

          在JS中,對象和關系型數組(hashes)兩個概念通常是沒有區別,下面的這兩行代碼是等價的:


          obj.some_function();
          obj['some_function']();


          等了這么久,我可以擁有自己的Class了么?
          OO的強大力量來自于類Class。當然了我們的JavaScript同樣也可以做到這一點,請看吧:

          //defining?a?new?class?called?Pet
          var?Pet?=?function(petName,?age){
          ????
          this.name?=?petName;
          ????
          this.age?=?age;
          }
          ;

          //let's?create?an?object?of?the?Pet?class
          var?famousDog?=?new?Pet('Santa\'s?Little?Helper',?15);
          alert('This?pet?is?called?'?
          +?famousDog.name);

          但是我們如何能夠將方法加到我們的Pet? Class中來呢。我們可以為我們所有的類定義一個prototype屬性。prototype屬性其實也是一個對象,它包含一個類所擁有的一切其他對象。甚至默認JS類(Date,String,Number)也可以擁有prototype對象,使得各種新的方法和屬性能擴充其中,讓基礎類獲得更多的特性。
          Pet.prototype.communicate?=?function(){?
          ????alert('I?
          do?not?know?what?I?should?say,?but?my?name?is?'?+?this.name);
          }
          ;
          別忘了,我們得先導入 prototype.js才行。
          ps: 個人認為象下面創建類,可能更簡潔一點。
          var?Pet?=?Class.create();
          Pet.prototype?
          =?{
          ????
          //our?'constructor'
          ????initialize:?function(petName,?age){
          ????????
          this.name?=?petName;
          ????????
          this.age?=?age;
          ????}
          ,
          ????
          ????communicate:?
          function(){
          ????????alert('I?
          do?not?know?what?I?should?say,?but?my?name?is?'?+?this.name);
          ????}

          }
          ;????

          將方法做為參數
          如果你沒有使用過支持closure的語言,象Ruby,C#,你會發現象這樣的語法真是太有趣了:
          var?myArray?=?['first',?'second',?'third'];
          myArray.each(?
          function(item,?index){
          ????alert('The?item?
          in?the?position?#'?+?index?+?'?is:'?+?item);
          }
          );

          未完帶續.........

          posted on 2006-07-29 15:13 謝瑋 閱讀(581) 評論(2)  編輯  收藏 所屬分類: 流行框架javascriptWeb

          評論

          # re: JSON 入門與JavaScript提高(原創) 2008-09-17 09:24 fgh

          fgh  回復  更多評論   

          # re: JSON 入門與JavaScript提高(原創) 2008-09-17 09:26 lp

          The dogs and cats are interesting.  回復  更多評論   

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 衡阳市| 连城县| 天祝| 易门县| 宣化县| 卢氏县| 开阳县| 平谷区| 察哈| 托克托县| 姚安县| 涿鹿县| 澎湖县| 山西省| 肇东市| 托克托县| 五原县| 于都县| 鸡泽县| 财经| 普洱| 孝感市| 突泉县| 澄迈县| 阿巴嘎旗| 潜江市| 景宁| 亳州市| 德令哈市| 江北区| 深泽县| 南通市| 琼海市| 台湾省| 胶州市| 丹棱县| 若羌县| 福州市| 平和县| 西乌珠穆沁旗| 化州市|