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

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

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

    posts - 165, comments - 198, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    javascript 基礎總結(面向對象)

    Posted on 2009-02-12 11:56 G_G 閱讀(1838) 評論(2)  編輯  收藏 所屬分類: javascript
    javascript 學習
    ?? ? ? javascript 大體上可分為3個不同部分組成: 核心(ECMAscript),文本對象(DOM),瀏覽器對象(BOM)
      1. ?核心(ECMAscript): 關鍵字,語句,運算符,對象
      2. 文本對象(DOM):DOM將把整個頁面規劃成由節點層級構成的文檔.
        1. 解析遵循 W3C html dom 標準
        2. ? W3C dom 參考特別關注 DOM Node 說明???
      3. BOM 瀏覽器對象.? cookie,彈出新瀏覽器,瀏覽器設置大小
    ?
    核心(ECMAscript)Global 內置對象;
    ????? 方法: parseInt(),isNan(),encodeURI()...等都為此對象方法
    ????? 特別注意 eval();動態語言的象征 比如:eval("alert('hi')"); 但這個方法很邪惡(安全方面)
    文本對象(DOM)說明:
    ?? ??? ?
    <bookstore>
    <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
    </book>
    </bookstore>

    DOM node tree

    Node tree

    ?? ??? ??? ???


    ??? ?

    ? 1. ECMAscript基礎

    ?????? $ 變量弱類型 ; ??? 匈牙利類型標示 : var iOuouValue=100;?

    ?????? $ 結束行分號有無都可以; ??? 但再 onsubmit="javascript:function();return false;"

    ?????? $ 關鍵字 ; 提別注意

    ??????????????? "constructor" bean.constructor

    ???????????????????? //print bean function(){

    ????????????????????????? ....

    ????????????????????? }

    ??????????????? "typeof" ? var test=1; alert(typeof testX); //output "undefined"

    ??????????????? "NaN" - not a number ->? isNan("blue"); //output "true" ? ->isNan("123"); //output "false"?

    ?????? $ 對象; var o = new Object(); var a = {}?

    ?? ??? ??? ??? ?這里特別說明下 我們普通寫的 一個 function 就是一個 object?

    ?? ??? ??? ?? 這?? var a = {name:"劉凱毅"} 等同與 var a = function(){this.name="劉凱毅"};

    ?? ??? ??? ??? ???? 來個 {name:"test",pass:"123456",addr:"bj"} //這是什么 ?! json

    ?? ??? ??? ???????? 當 var str = '{name:"test",pass:"123456",addr:"bj"}'

    ?? ??? ??? ??? ???? var objectBean = eval(str); //這里就是 對象 objectBea.name 使用了

    ? 域概念:

    <SCRIPT type=text/javascript>
    var sMessage = 'Hello';
    function setSomething() {
    ? sColor = 'red';
    ? sMessage = 'Hello World!';
    }
    setSomething();
    alert(sMessage); //Hello World!
    alert(sColor); //red
    </SCRIPT>
    <SCRIPT type=text/javascript>
    var sMessage = 'Hello';
    function setSomething() {
    ? var sColor = 'red';
    ? sMessage = 'Hello World!';
    }
    setSomething();
    alert(sMessage); //Hello World!
    alert(sColor); // 什么都沒有
    </SCRIPT>

    <SCRIPT type=text/javascript>
    var sMessage = 'Hello';
    function setSomething() {
    ? var sColor = 'red';
    ? var sMessage = 'Hello World!';
    }
    setSomething();
    alert(sMessage); //Hello
    alert(sColor); // 什么都沒有
    </SCRIPT>

    ??????????

    為面向對象做基礎:object prototype 類型的對象應用。參考

    // 最簡單的 繼承
    Object.prototype.inObj?=?1;

    function?A()
    {
    ????this.inA?=?2;
    }
    ?
    A.prototype.inAProto?=?3;
    ?
    B.prototype?=?new?A;????????????//?Hook?up?A?into?B's?prototype?chain
    B.prototype.constructor?=?B;
    function?B()
    {
    ????this.inB?=?4;
    }
    ?
    B.prototype.inBProto?=?5;
    ?
    x?=?new?B;
    document.write(x.inObj?+?',?'?+?x.inA?+?',?'?+?x.inAProto?+?',?'?+?x.inB?+?',?'?+?x.inBProto);

    //1, 2, 3, 4, 5
    //增加點信心 http://www.json.org/json.js
    Object.prototype.toJSONString = function (filter) {
    return JSON.stringify(this, filter);
    };
    后我們就可以使用 bean.toJSONString()不是嗎?

    ??? $ arguments ;

    ???????? function getFun(){alert(arguments.length);}?? ;

    ?

    ?? ??? ??? ??? ?getFun("xx") //output 1

    ?? ??? ??? ??? ?getFun("xx",23) //output 2



    ?? $ 語句 ;特殊說明下 for?

    ?????????? for(var i=0i<iCount;i++)?? 或 for( attr in object ) ;

    ?????????? 如果無聊 你可以 for( sProp in window ){alert(sProp+"你丫點啊!");} //看看 javascript 的反射

    ??????????????

    ? ? ? ? ? ? ? ??

    ???


    面向對象:

    ? var bean = new Bean();

    ??

    ? 1.工廠方法

    ??????? ??? function getAttr(){

    ???? ?? ??? ???? alert(this.attr)

    ??????????? }

    ??????????? function Bean(tattr){

    ?? ??? ??? ???? var bean = new Object;

    ?? ??? ??? ?????bean.attr = tattr;

    ?? ??? ??? ?????bean.getAttr = getAttr;

    ?? ??? ??? ???? return bean ;

    ??????????? }

    ?? ???? 根本就是山寨版 面向對象

    ? 2.構造

    ????? ??? function Bean(tattr){

    ?? ??? ?????? this.attr = tattr ;

    ?? ??? ??? ?? bean.getAttr = function(){

    ?? ??? ??? ?????alert(this.attr);

    ?? ??? ??? ? ?} ? ?

    ?? ??? ???}

    ?? 其上 2 總 再Bean 對象創建時,方法會 “重復生成函數”!


    ? 3.原型模式

    ??? function Bean(){}

    ??? Bean.prototype.attr = "";

    ??? Bean.prototype.getAttr=function(){alert(this.attr);}

    ?? ?

    ?? 解決 “重復生成函數” 問題,但新的問題 Bean.prototype.getArray = new Array();


    ?? 其 new 對象 bean1 和 bean2 都會共享 new Array 空間(是我們不想看到的)


    ? 4.混合 模型 :)? 哈哈

    ???? function Bean(){

    ?? ??? ?this.attr= "";

    ?? ??? ?this.getArray=new Array;

    ?? ?}

    ?? ?Bean.prototype.getAttr=function(){alert(this.attr);}

    ?

    ? 5.動態原型 (注意下面開始,就是真正的面向對象!!!)

    ?? ??? function Bean(){

    ?? ???? this.attr= "";
    ?? ??? ?this.getArray=new Array;

    ?? ???? //classload 加載 時

    ?? ???? if(typeof Bean._initialized == "undefined" ){

    ?? ??? ???? Bean.prototype.getAttr=function(){alert(this.attr);};

    ?? ???? ??? Bean._initialized= true ;

    ?? ??? ?}

    ???? }

    ???

    /****************************************************************/

    對象繼承

    ? 1.對象冒充!!(可支持多繼承,山寨很強大)

    ????? function classA(sstr){

    ?? ???? this.color = sstr ;

    ?? ???? this.sayColor = function(){

    ?? ??? ???? alert(this.color);

    ?? ??? ?};

    ?? ???}

    ?? ?? function classC(){}

    ?? ??? function classB(){

    ?? ??? ???? this.newMethod =ClassA ;

    ?? ??? ???? this.newMethod();

    ?? ??? ???? delete this.newMethod ;


    ?? ??? ???? this.newMethod =ClassC ;

    ?? ??? ???? this.newMethod();

    ?? ??? ???? delete this.newMethod ;

    ?? ??? ????

    ?? ??? ???? this.arrt = "google";

    ?? ??? ?}

    ?? ?

    ? 2.call() apply() 也山寨,

    ????? function classA(sstr){

    ?? ???? this.color = sstr ;

    ?? ???? this.sayColor = function(str){

    ?? ??? ???? alert(str+this.color);

    ?? ??? ?};

    ?? ???}

    ?? ??? function classB(){

    ?? ??? ??? // this.newMethod =ClassA ;

    ?? ??? ??? // this.newMethod();

    ?? ??? ??? // delete this.newMethod ;

    ?? ??? ???? classA.call(this,"red");

    ?? ??? ???? //classA.apply(this,new Array("red"))

    ?? ??? ???? this.arrt = "baidu";

    ?? ??? }


    3.正統的繼承 原型鏈 (但不支持多繼承)
    ??? function classA(){this.oo="test";}
    ??? classA.prototype.color = "red";
    ??? function classB(){}
    ??? classB.prototype = new classA ;
    ??? classB.prototype.sayName = function(){
    ?? ???? alert( this.color );
    ?? ?}
    ?? ?
    var bb = new classB ;
    ?? ?bb.sayName();
    // output red
    ?? ?
    alert(bb.oo); // output test

    ?? ?alert( bb instanceof classA); //output true
    ?? ?alert( bb instanceof classB); //output? true

    4.如果你要多繼承!!并且還支持 instanceof
    ?? ???? 混合方式:
    ?? ???? function classA(){}
    ?? ???? function classB(){}
    ?? ???? function classC(){
    ?? ??? ???? classA.call(this);
    ?? ??? ???? classC.call(this);
    ?? ??? ?}
    ?? ???? classC.prototype = new classA ;//注意 這
    instanceof 只能對 A有用

    ?? ??? ?






    ???


    評論

    # re: javascript 基礎總結(面向對象)  回復  更多評論   

    2009-02-13 21:02 by 葉澍成
    LZ需要好好排版下,呵呵。不然大家很難看啊

    # re: javascript 基礎總結(面向對象)  回復  更多評論   

    2009-02-16 09:24 by Skynet
    啊 不好意哦
    我這文章本來就出自 google doc 的

    如果感覺 看的費勁 就在 (不過排版也是夠嗆,不過比上面好點)
    http://docs.google.com/Doc?id=dkvfctc_26f8krcdct&hl=en
    主站蜘蛛池模板: 免费国产va视频永久在线观看| 怡红院免费的全部视频| 国产精品亚洲精品日韩已方| jizz日本免费| 亚洲Av无码专区国产乱码DVD| 在线观看成人免费视频不卡| 国产亚洲美女精品久久久久| 亚洲精品国产精品乱码不99| 亚洲啪啪免费视频| 亚洲免费二区三区| 美女露隐私全部免费直播| 亚洲av丰满熟妇在线播放| 国产裸模视频免费区无码| 好紧我太爽了视频免费国产 | 亚洲精华液一二三产区| 亚洲日韩精品无码一区二区三区| 一区二区三区视频免费| 亚洲性猛交xx乱| 国产啪亚洲国产精品无码| 日韩一区二区a片免费观看| 中文字幕手机在线免费看电影| 亚洲一级高清在线中文字幕| 国产成人综合亚洲AV第一页| 卡一卡二卡三在线入口免费| 亚洲免费精彩视频在线观看| 人成午夜免费大片在线观看| 亚洲中文字幕无码mv| 亚洲精品mv在线观看| 四虎www免费人成| 51精品视频免费国产专区| 国产99久久久久久免费看| 亚洲成在人线aⅴ免费毛片| 亚洲午夜在线一区| 久久亚洲精品成人综合| 亚洲日韩在线观看| 国产高清免费在线| 成人免费无码大片A毛片抽搐| 五月亭亭免费高清在线| 99久久久国产精品免费蜜臀| a视频在线观看免费| 国产精品免费久久|