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

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

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

    關于javascript的面向對象

    對于javascript的面向對象有不少說法,有的說,javascript不是面向對象的,有的說javascript是基于對象的,有的說使用javascript可以實現面向對象。
    我 查閱了一些資料,包括ECMAscript Language Specification Edition 3 24-Mar-00,似乎應該說成javascript是基于原型(prototype-based )的面向對象,而C++,java之類的是基于類的面向對象,即面向對象的實現方式不同。面向對象并不必然是基于class的。一篇文章中提到的面向對象 最主要的三個特性
    * Encapsulation(封裝) - Support for method calls on a Javascript object as a member of a Class.
    * Polymorphism(多態)- The ability for two classes to respond to the same (collection of) methods.
    * Inheritance (繼承)- The ability to define the behavior of one object in terms of another by sub-classing.
    在javascript里都可實現。
    感覺對于理解javascript的面向對象特性,有這樣幾點需要注意,
    1、將面向對象作為一個獨立的通用概念,面向對象有不同的實現方式,也有不同的擴展。C++的面向對象和java不完全相同,javascript和他們也不完全相同。
    2、對于java程序員需要知道javascript里的對象和java里所談的對象(實例)有很大不同。
    3、函數也是對象,是可以作為構造器的對象,是可以產生對象的對象。因為javascript里所謂對象就是指屬性的無序集合。函數可以添加屬性,所以也是對象。
    4、進一步了解new和prototype的定義。
    5、 再對java程序員說一句,對象,在javascript里非函數的對象,最類似java里的對象(實例),java里對象有屬性,有方法,在 javascript里對象只有屬性,所謂的方法就是函數類型的屬性,引用一般屬性可以寫成o.x,也可以寫成o["x"],使用對象的方法也同樣o.f ()可以,o["f"]()也可以。另外你所引用的對象的屬性可以是對象本身的屬性,也可以是該對象的構造函數的原型的屬性。
    6、我以前總是對照java來理解javascript,但現在看理解了C++或C的函數指針的概念,將javascript類比C或C++似乎更自然些。
    具體一點說:
    對 某函數對象比如Foo執行new操作時,首先會生成一個新對象,一個非函數類型的對象,然后執行Foo,在Foo的函數體中,this代指新創建的函數, 這種操作稱為將函數作為構造器(constructor)使用,接著還會將該對象與Foo的原型(Prototype)建立聯系。
    var Foo = function(){
    this.x = "abc";
    this.sayHello1 = function(){alert("hello你個頭!");}
    };
    Foo.sayHello2 = function(){alert("你hello個頭!");}

    Foo.prototype.sayHello3 = function(){alert("你個頭hello!");}

    var foo = new Foo;
    foo.sayHello4 = function(){alert("暈!");};
    foo.sayHello1();
    //如果把Foo當作類定義的話,sayHello2可以被理解為靜態方法
    //但和java不同的是,foo.sayHello2();就會抱錯。
    Foo.sayHello2();
    //在foo的屬性里并沒有sayHello3這個函數對象,但在foo的構造函數的
    //原型對象里有這個函數屬性,所以可以這么來調用,如果foo的構造函數的
    //原型對象里也沒這個屬性的話,就會到這個原型對象的構造函數
    //的原型對象里去找,以此類推。本例沒有體現這一點,今天太晚了,
    //下一篇里,我會在介紹javascript的幾個面向對象的實現方式里寫個這樣的例子。
    foo.sayHello3();
    foo.sayHello4();
    foo["sayHello4"]();
    alert(foo.x);
    ?

    posted on 2006-09-18 11:43 一農 閱讀(401) 評論(0)  編輯  收藏 所屬分類: javascript


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    公告

    南京 java輔導班 約等于免費 詳見yuqiaotech.com

    導航

    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    常用鏈接

    留言簿(10)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久久亚洲精品无码系列| 免费A级毛片无码久久版| 亚洲AV无码欧洲AV无码网站| 色吊丝免费观看网站| 日本免费电影一区| 成年人在线免费看视频| 亚洲男人天堂影院| 猫咪免费人成网站在线观看入口| 成人人观看的免费毛片| 亚洲av永久无码天堂网| 国产午夜无码片免费| 亚洲无av在线中文字幕| 国产精品免费福利久久| 亚洲精品国产成人99久久| 亚洲人成在线免费观看| 2020国产精品亚洲综合网| 免费网站看v片在线香蕉| 男男gvh肉在线观看免费| 久久久久久免费视频| 亚洲日韩国产精品第一页一区| 成人免费777777被爆出| 亚洲好看的理论片电影| 又粗又大又黑又长的免费视频| 狠狠色伊人亚洲综合网站色| 国产精品无码素人福利免费| 一区二区三区免费在线视频 | 男人的好免费观看在线视频| 亚洲人精品亚洲人成在线| 国产一区二区视频免费| 亚洲av乱码一区二区三区香蕉| 国产片AV片永久免费观看| 亚洲爆乳成av人在线视菜奈实| 亚洲国产精品狼友中文久久久| 暖暖在线视频免费视频| 亚洲综合久久一本伊伊区| 亚洲成av人片不卡无码久久| 精品国产一区二区三区免费| 99亚偷拍自图区亚洲| 亚洲日本一区二区一本一道| 91精品免费久久久久久久久| 国产偷国产偷亚洲高清人|