国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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的實現。

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

有幾點需要留意:

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

    簡單的類創建與繼承

    下面為其實現(便于閱讀并有注釋),大概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
    主站蜘蛛池模板: 欧美嫩交 | 日本六十路丰满老太交尾 | 国产亚洲精品成人婷婷久久小说 | 国产亚洲第一页 | 亚洲欧美国产另类 | 超级毛片 | 在线视频 日韩 | 亚洲欧美日韩成人 | 中日韩欧美在线观看 | 亚洲欧美中文日韩在线 | 免费a级在线观看完整片 | 日韩在线无 | 禽交| 一级黄免费 | 在线视频亚洲欧美 | 精品国产免费观看一区高清 | 99久久精品免费看国产 | 伊人操| 欧美极品一区 | 久久久久久亚洲精品不卡 | 波多野结衣系列在线观看 | 久久精品无码一区二区日韩av | 四虎成人精品免费影院 | 一级毛片免费观看久 | 国产一区二区三区免费在线观看 | 天天爱夜夜操 | 国产91在线视频 | 亚洲一区二区三区成人 | 亚洲欧美在线一区 | 一区二区国产在线观看 | 黄网站色视频免费观看 | 欧美在线综合 | 国产一区二区成人 | 超在线视频 | 精品日韩一区二区 | 99精品高清视频一区二区 | 精品国产高清自在线一区二区三区 | 亚洲一区二区精品视频 | 精品国产自在在线在线观看 | 一区二区三区在线免费视频 | 久久伊人一区二区三区四区 |