資料整理

           

          JSON 入門與JavaScript提高(原創(chuàng))

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


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

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

          在該對(duì)象被創(chuàng)建以后并且以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可以漂亮地應(yīng)用到j(luò)avascript中任何一個(gè)地方,作為function參數(shù)、返回值、服務(wù)器響應(yīng)...

          你理解了嗎?function同樣也是一個(gè)對(duì)象。
          ---------------------------------------------------------------
          或許JS程序員中有些人從來就不這么認(rèn)為,但是function確實(shí)也是一個(gè)Object。下面我們可以做個(gè)實(shí)驗(yàn)來驗(yàn)證一下,將你的function給你的另一個(gè)function做為參數(shù)傳遞,就傳一個(gè)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。注意它們后面都沒有帶括號(hào)"()",如果不這樣做的話我們傳遞的將不是"方法",而是該方法的返回值(在此例中為"Undefine")。

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

          ?
          Arrays, items 和對(duì)象成員object members
          請(qǐng)看下面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];

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

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

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

          在JS中,對(duì)象和關(guān)系型數(shù)組(hashes)兩個(gè)概念通常是沒有區(qū)別,下面的這兩行代碼是等價(jià)的:


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


          等了這么久,我可以擁有自己的Class了么?
          OO的強(qiáng)大力量來自于類Class。當(dāng)然了我們的JavaScript同樣也可以做到這一點(diǎn),請(qǐng)看吧:

          //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);

          但是我們?nèi)绾文軌驅(qū)⒎椒拥轿覀兊腜et? Class中來呢。我們可以為我們所有的類定義一個(gè)prototype屬性。prototype屬性其實(shí)也是一個(gè)對(duì)象,它包含一個(gè)類所擁有的一切其他對(duì)象。甚至默認(rèn)JS類(Date,String,Number)也可以擁有prototype對(duì)象,使得各種新的方法和屬性能擴(kuò)充其中,讓基礎(chǔ)類獲得更多的特性。
          Pet.prototype.communicate?=?function(){?
          ????alert('I?
          do?not?know?what?I?should?say,?but?my?name?is?'?+?this.name);
          }
          ;
          別忘了,我們得先導(dǎo)入 prototype.js才行。
          ps: 個(gè)人認(rèn)為象下面創(chuàng)建類,可能更簡潔一點(diǎn)。
          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);
          ????}

          }
          ;????

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

          未完帶續(xù).........

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

          評(píng)論

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

          fgh  回復(fù)  更多評(píng)論   

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

          The dogs and cats are interesting.  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 东安县| 河西区| 平江县| 三原县| 南昌市| 贵阳市| 金山区| 广德县| 平顶山市| 海晏县| 洛隆县| 尚志市| 诸城市| 泸定县| 临桂县| 于都县| 南通市| 嵊州市| 牙克石市| 日喀则市| 垦利县| 青铜峡市| 广南县| 乌拉特后旗| 肇东市| 留坝县| 嫩江县| 昭通市| 芷江| 无棣县| 美姑县| 台东县| 无锡市| 长葛市| 九寨沟县| 图木舒克市| 衢州市| 万安县| 泗洪县| 唐山市| 志丹县|