<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        javascript面向對象編程基礎多態_js面向對象

        來源:懂視網 責編:小采 時間:2020-11-27 20:44:05
        文檔

        javascript面向對象編程基礎多態_js面向對象

        javascript面向對象編程基礎多態_js面向對象:Javascript已經可以模擬出面向對象的封裝和繼承特性,但是不幸的是Javascript對多態特性的支持非常弱!其它面向對象語言的多態一般都由方法重載和虛方法來實現多態,Javascript也通過這兩種途徑來實現! 重載:由于Javascript是弱類型的語言,而且又支持
        推薦度:
        導讀javascript面向對象編程基礎多態_js面向對象:Javascript已經可以模擬出面向對象的封裝和繼承特性,但是不幸的是Javascript對多態特性的支持非常弱!其它面向對象語言的多態一般都由方法重載和虛方法來實現多態,Javascript也通過這兩種途徑來實現! 重載:由于Javascript是弱類型的語言,而且又支持

        Javascript已經可以模擬出面向對象的封裝和繼承特性,但是不幸的是Javascript對多態特性的支持非常弱!其它面向對象語言的多態一般都由方法重載和虛方法來實現多態,Javascript也通過這兩種途徑來實現!

        重載:由于Javascript是弱類型的語言,而且又支持可變參數,當我們定義重載方法的時候,解釋器無法通過參數類型和參數個數來區分不同的重載方法,因此方法重載是不被支持的!當先后定義了同名的方法的時候,后定義的方法會覆蓋先定義的方法!

        既然解釋器無法分辨重載方法,那就手動區分不同的方法:
        代碼如下:
        var MyClass=function(){
        var AddNum=function(a,b){
        return a+b;
        }
        var AddString=function(a,b){
        return "I am here"+a+b;
        }
        this.Add=function(a,b){
        if(typeof(a)=="number")
        return AddNum(a,b);
        else
        return AddString(a,b);
        }
        }
        var MyObj = new MyClass();
        var X = MyObj.Add(5,6);
        var Y = MyObj.Add("A","FFFFFF");
        alert(X); //結果:11
        alert(Y); //結果:I am hereAFFFFFF

        虛方法:
        代碼如下:
        function BaseClass(){
        this.Hello=function(){
        return this.Say();
        }
        }
        function MyClassA(){
        this.Say=function(){
        return "Hello";
        }
        }
        function MyClassB(){
        this.Say=function(){
        return "This is MyClassB";
        }
        }
        MyClassA.prototype = new BaseClass();
        MyClassB.prototype = new BaseClass();
        var ObjA = new MyClassA();
        var XX = ObjA.Hello();
        alert(XX); //結果:Hello
        var ObjB = new MyClassB();
        var YY = ObjB.Hello();
        alert(YY); //結果:This is MyClassB

        由于Javascript解釋執行的特性,因此可以再基類中調用將要在派生類中定義的方法,那么這個基類方法就相當于虛方法,可以實現模擬多態!
        js的重載和重寫(覆寫):
        重載的意思是,“同一個名字的函數(注意這里包括函數)或方法可以有多個實現,它們依靠參數的類型和(或)參數的個數來區分識別”。而重寫(覆蓋)的意思是,“子類中可以定義與父類中同名,并且參數類型和個數也相同的方法,這些方法的定義后,在子類的實例化對象中,父類中繼承的這些同名方法將被隱藏”。重載的英文是overload,覆蓋的英文是override。好了,概念介紹到這里,你猜到我要說什么了嗎?嘿嘿,Code is cheap.看重載代碼:
        代碼如下:
        // 通過函數的arguments屬性實現重載
        function add() {
        var sum = 0 ;
        for ( var i = 0 ; i < arguments.length; i ++ ) {
        sum += arguments[i];
        }
        return sum;
        }
        function test() {
        alert(add());
        alert(add( 1 , 2 ));
        alert(add( 1 , 2 , 3 ));
        }

        通過代碼運行結果,這樣就實現了任意多個參數加法函數的重載了。當然,你還可以在函數中通過 instanceof 或者 constructor 來判斷每個參數的類型,來決定后面執行什么操作,實現更為復雜的函數或方法重載。總之,javascript 的重載,是在函數中由用戶自己通過操作 arguments 這個屬性來實現的。關于arguments的特性,前面我已經做了簡單介紹,參考拙文:http://blog.csdn.net/zhanglingdll_39/archive/2009/08/20/4465670.aspx 。
        下面重點理解js重寫的實現:
        // 為類添加靜態方法inherit表示繼承于某類
        Function.prototype.inherit = function (baseClass) {
        for ( var p in baseClass.prototype) {
        this .prototype[p] = baseClass.prototype[p];
        }
        }
        // js實現重寫
        function parentClass() { // 父類
        }
        parentClass.prototype.method = function () {
        alert( " parentClass method " );
        }
        function subClass() { // 子類
        }
        // 代碼如下:
        下面這一句和subClass.prototype = new parentClass();等價
        subClass.inherit(parentClass);
        // subClass.prototype.method = function() { // 子類重寫了父類的方法 -- 去掉注釋運行試試看
        // alert("subClass method");
        // }
        function test() {
        var obj = new subClass();
        obj.method();
        }
        這樣,子類中定義的method 就覆蓋了從父類中繼承來的method 方法了。這是你可能會問,如何在子類中調用父類的method方法呢?好的,看實現如下:
        // 為類添加靜態方法inherit表示繼承于某類
        Function.prototype.inherit = function (baseClass) {
        for ( var p in baseClass.prototype) {
        this .prototype[p] = baseClass.prototype[p];
        }
        }
        /* 參考文章:http://menjoy.javaeye.com/blog/127847 */
        // js實現重寫
        function parentClass() {
        this .method = function () {
        alert( " parentClass method " );
        }
        }
        function subClass() {
        var method = this .method;
        this .method = function () {
        method.call( this );
        alert( " subClass method " );
        }
        }
        subClass.prototype = new parentClass();
        // subClass.inherit(parentClass); //這一句貌似和上一句subClass.prototype = new parentClass();等價,其實呢????(注釋上一行,運行這一行看看)
        subClass.prototype.constructor = subClass;
        function test() {
        var obj = new subClass();
        obj.method();
        }

        好了,關于多態的介紹就到這里。js面向對象編程猶如浩瀚海洋廣闊無邊,我這三篇參考別人的文章寫出來的js面向對象基礎只能當作入門者學習的參考。學無止境,參考了網上幾篇老大們的牛文,深知自身技術的淺薄,對于已經超越了解階段的讀者,還是看看園子里高人的技術文章吧。我這里要先拜謝園子里的高人了。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        javascript面向對象編程基礎多態_js面向對象

        javascript面向對象編程基礎多態_js面向對象:Javascript已經可以模擬出面向對象的封裝和繼承特性,但是不幸的是Javascript對多態特性的支持非常弱!其它面向對象語言的多態一般都由方法重載和虛方法來實現多態,Javascript也通過這兩種途徑來實現! 重載:由于Javascript是弱類型的語言,而且又支持
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 粉色视频在线观看www免费| 91在线亚洲综合在线| 花蝴蝶免费视频在线观看高清版 | 色偷偷亚洲第一综合| 在线免费观看一级毛片| 国产亚洲精午夜久久久久久| 美女视频黄频a免费观看| 亚洲国产成人精品女人久久久| 亚洲永久中文字幕在线| 免费视频爱爱太爽了| 亚洲永久精品ww47| 免费91最新地址永久入口| 91大神亚洲影视在线| 在线观看人成视频免费无遮挡 | 日本高清高色视频免费| 亚洲精彩视频在线观看| 最近中文字幕无吗高清免费视频| 亚洲综合伊人制服丝袜美腿| 小日子的在线观看免费| 亚洲最大福利视频| 亚洲免费在线观看| 一级毛片在线免费看| 亚洲美国产亚洲AV| 成人免费毛片视频| 一区二区三区视频免费观看| 免费成人av电影| 久久狠狠躁免费观看2020| 亚洲毛片基地4455ww| 亚洲精品国产精品乱码不卡| 伊人久久免费视频| 亚洲成a∨人片在无码2023| 国产亚洲情侣一区二区无| 69影院毛片免费观看视频在线| 99人中文字幕亚洲区| 无码午夜成人1000部免费视频| 中文字幕在线观看亚洲视频| 国产成人亚洲综合| 青娱乐免费在线视频| 亚洲熟女综合一区二区三区| 久久精品国产亚洲精品| 69堂人成无码免费视频果冻传媒|