<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    資料整理

     

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

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

    在該對象被創(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可以漂亮地應用到javascript中任何一個地方,作為function參數(shù)、返回值、服務器響應...

    你理解了嗎?function同樣也是一個對象。
    ---------------------------------------------------------------
    或許JS程序員中有些人從來就不這么認為,但是function確實也是一個Object。下面我們可以做個實驗來驗證一下,將你的function給你的另一個function做為參數(shù)傳遞,就傳一個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];

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

    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中,對象和關系型數(shù)組(hashes)兩個概念通常是沒有區(qū)別,下面的這兩行代碼是等價的:


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

    但是我們?nèi)绾文軌驅⒎椒拥轿覀兊腜et? 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: 個人認為象下面創(chuàng)建類,可能更簡潔一點。
    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#,你會發(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 謝瑋 閱讀(578) 評論(2)  編輯  收藏 所屬分類: 流行框架javascriptWeb

    評論

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

    fgh  回復  更多評論   

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

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

    導航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲一区精品中文字幕| 日本媚薬痉挛在线观看免费| 色多多A级毛片免费看| 高h视频在线免费观看| 91视频免费网站| 日韩免费一区二区三区在线播放| 无遮免费网站在线入口| 亚洲国产高清视频在线观看| 亚洲国产精品网站在线播放| 一个人看的免费高清视频日本| 免费A级毛片无码A∨| 日韩成全视频观看免费观看高清| 狠狠色伊人亚洲综合网站色| 两个人看的www免费高清| 免费a级毛片高清视频不卡 | 亚洲男人都懂得羞羞网站| 亚洲熟女综合色一区二区三区 | 国产精品成人免费福利| 免费看国产一级片| 亚洲人成免费电影| 两性色午夜免费视频| 亚洲成年人在线观看| 青青草国产免费国产是公开 | 日本最新免费网站| 亚洲精品乱码久久久久久蜜桃不卡| 亚洲不卡视频在线观看| 久久免费的精品国产V∧| 亚洲成人免费网站| 性感美女视频免费网站午夜| 7777久久亚洲中文字幕蜜桃| a级毛片免费高清视频| 国产真人无遮挡作爱免费视频| 亚洲欧洲自拍拍偷综合| 在线观看片免费人成视频无码| 亚洲JIZZJIZZ中国少妇中文| 亚洲精品美女久久久久9999| 日本xxwwxxww在线视频免费| 久久久久久毛片免费看| 在线观看亚洲天天一三视| 福利片免费一区二区三区| 在线免费观看国产视频|