<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類框架_基礎知識

        來源:懂視網 責編:小采 時間:2020-11-27 21:39:56
        文檔

        介紹一個簡單的JavaScript類框架_基礎知識

        介紹一個簡單的JavaScript類框架_基礎知識:在寫work-in-progress JavaScript book一書時,對于javascript繼承體系,我花費了相當的時間,并在該過程中研究了各種不同的模擬經典類繼承的方案。這些技術方案中,我最為推崇的是base2與Prototype的實現。 從這些方案中,應該能提煉出一個具有其思想內涵的
        推薦度:
        導讀介紹一個簡單的JavaScript類框架_基礎知識:在寫work-in-progress JavaScript book一書時,對于javascript繼承體系,我花費了相當的時間,并在該過程中研究了各種不同的模擬經典類繼承的方案。這些技術方案中,我最為推崇的是base2與Prototype的實現。 從這些方案中,應該能提煉出一個具有其思想內涵的

        在寫work-in-progress JavaScript book一書時,對于javascript繼承體系,我花費了相當的時間,并在該過程中研究了各種不同的模擬經典類繼承的方案。這些技術方案中,我最為推崇的是base2與Prototype的實現。

        從這些方案中,應該能提煉出一個具有其思想內涵的框架,該框架須具有簡單、可重用、易于理解并無依賴等特點,其中簡單性與可用性是重點。以下是使用示例:

        有幾點需要留意:

      1. 構造函數須簡單(通過init函數來實現),
      2. 新定義的類比須繼承于已有的類,
      3. 所有的‘類'都繼承于始祖類:Class,因此如果要創建一個全新的類,該類必須為Class的子類,
      4. 最具挑戰的一點:父類的被覆寫方法必須能訪問到(通過配置上下文環境)。
      5. 在上面的示例中,你能發現通過this._super()來調用Person父類的init()和dance()方法。
      6. 對結果相當滿意:使類的定義結構化,保持單一繼承,并且能夠調用超類方法。

        簡單的類創建與繼承

        下面為其實現(便于閱讀并有注釋),大概25行左右。歡迎并感謝提出建議。

        其中 “初始化(initializing/don't call init)”與“創建_super方法”最為棘手。接下來,我會對此做簡要的介紹,使得大家對其實現機制能更好的理解。

        初始化

        為了說明函數原型式的繼承方式,首先來看傳統的實現過程,即將子類的prototype屬性指向父類的一個實例。如下所示:


        然而,這里具有挑戰性的一點,便是我們只想要得到‘是否實例(instatnceOf)'的效果,而不需要實例一個 Person并調用其構造函數所帶來的后果。為防止這一點,在代碼中設置一個bool參數initializing,只有在實例化父類并將其配置到子類的prototype屬性時, 其值才為true。這樣處理的目的是區分開真正的實例化與設計繼承時這兩種調用構造函數之間的區別,進而在真正實例化時調用init方法:

        值得特別注意的是,因為在init函數中可能會運行相當費資源的代碼(如連接服務器,創建DOM元素等,誰也無法預測),所以做出區分是完全必要的。

        超類方法(Super Method)

        當使用繼承時,最常見的需求便是子類能訪問超類被覆寫的方法。在該實現下,最終的方案便是提供一個臨時方法(._super),該方法指向超類方法,并且只能在子類方法中訪問。


        實現這一功能需要幾步處理。首先,我們使用extend來合并基本的Person實例(類實例,上面我們提到過其構造過程)與字面對象(Person.extend()的函數參數)。在合并過程中,做了簡單的檢查:首先檢查將被合并的的屬性是否為函數,如為函數,然后檢查將被覆寫的超類屬性是否也為函數?如果這兩個檢查都為true,則需要為該屬性準備_super方法。

        注意,在這里創建了一個匿名閉包(返回的是函數對象)來封裝增加的super方法。基于維護運行環境的需要,我們應該將舊的this._super(不管其是否存在)保存起來以備函數運行后重置,這有助于在有相同名稱(不想偶然丟失對象指針)的情況下發生不可預知的問題。

        然后,創建新的_super方法,該方法對象僅指向超類中被覆寫的方法。謝天謝地,不用對_super做任何改動或變更作用域,因為函數的執行環境會隨著函數調用對象自動變更(指針this會指向超類).

        最后,調用字面量對象的方法,方法執行中可能會使用this._super(),方法執行后,將屬性_super重置回其原來狀態,之后return退出函數。


        以上可以有許多種方案能達到相同的效果(我之前曾見過將super綁定到其自身,然后用arguments.callee訪問),但是感覺還是這種方法最能能體現可用性與簡潔性的特點。

        在我已完成的多個基于javascript原型的工作中,只有這個類繼承實現方案是我發表出來與大家分享的。我認為,簡潔的代碼(易于學習,易于繼承,更少下載)更需要提出來讓大家探討,因此,對于學習javascript類構造與繼承的人們來說,這套實現方案是一個好的開始。

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

        文檔

        介紹一個簡單的JavaScript類框架_基礎知識

        介紹一個簡單的JavaScript類框架_基礎知識:在寫work-in-progress JavaScript book一書時,對于javascript繼承體系,我花費了相當的時間,并在該過程中研究了各種不同的模擬經典類繼承的方案。這些技術方案中,我最為推崇的是base2與Prototype的實現。 從這些方案中,應該能提煉出一個具有其思想內涵的
        推薦度:
        標簽: 介紹 js 基礎知識
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 无码AV片在线观看免费| yellow免费网站| 久久笫一福利免费导航| 亚洲成人精品久久| 久久久久久久99精品免费 | 亚洲综合色区中文字幕| 我们的2018在线观看免费高清 | 亚洲va在线va天堂va手机| 24小时日本韩国高清免费| 亚洲乱码卡一卡二卡三| 歪歪漫画在线观看官网免费阅读| 亚洲一级毛片视频| 成人免费视频一区二区三区| 亚洲av色香蕉一区二区三区| 亚洲精品美女久久久久99小说| 久久国产福利免费| 无码久久精品国产亚洲Av影片| 免费观看激色视频网站(性色)| 亚洲中文字幕无码久久| 亚洲av午夜成人片精品电影| 中文字幕看片在线a免费| 亚洲午夜久久久精品影院| 国产一卡2卡3卡4卡无卡免费视频 国产一卡二卡3卡四卡免费 | 亚洲国产系列一区二区三区| 免费观看a级毛片| 一级做a爰片性色毛片免费网站| 亚洲精品午夜国产VA久久成人 | 美女羞羞喷液视频免费| 亚洲午夜福利717| 97碰公开在线观看免费视频| 亚洲AV色欲色欲WWW| 国产精品亚洲片在线| 国产h视频在线观看免费| 免费无码一区二区| 亚洲三级电影网址| 日本无吗免费一二区| 日本免费A级毛一片| 亚洲中文字幕无码爆乳| 久久久久亚洲AV成人网人人网站 | 亚洲AV成人精品日韩一区| 国产V亚洲V天堂无码|