朋友們大家好,我們今天這一講就接著前面的封裝繼續講解,今天就是在前面內容上面的升級,OOP思想中的繼承,我們就先來解釋一下繼承到底是什麼意思,我們在什麼地方會用到繼續。
繼承就是,後代繼續祖先的一系列屬性,行為。後代仍算是與祖先同族,下面我們再用一些具體描述,來理解一下什麼是繼承
中國人,跟美國人都是繼承自人類祖先,所以我們具有相同的屬性行為,但是還有一定的差異,後面我們們將繼續講到的多態性,所以透過上面的範例圖,我們可以清晰的知道,人與人之前其實大同小異,所以我們再看看下面的範例程式碼,我們就知道,用程式碼來模擬繼承,我們就又可以知道一種方法來寫盡量少的程式碼達到做盡量多的事。
//遗传继承函数 function Extend(Children,Parent){ //这里仅仅只是继承的原型链接定义的行为 for(var p in Parent.prototype){ Children[p] = Parent.prototype[p]; } } //人类祖先 function Human(){ this.weight = "50kg"; this.height = "180cm"; this.hair = "棕色"; } //吃饭 Human.prototype.Eat = function(){ console.log("吃饭"); } //说话 Human.prototype.Say = function(){ console.log("大家好我是地球人"); } //行走 Human.prototype.Walk = function(){ console.log("我是人类,天生就可以两条腿直立行走"); } //繁衍 Human.prototype.Multiply = function(){ console.log("跟老婆一起做羞羞的事,就是为了人类的繁荣"); } //中国人 function Chinese(){ //调用继承函数 Extend(this,Human); } //美国人 function American(){ //调用继承函数 Extend(this,Human); }
我們就這樣寫,就模擬了高階語言中的繼承,下面我們來看看運行後,有沒有問題
運行後,我們發現了問題,這樣寫,我們已經可以實現原型鏈接的繼承了,而且也大大的節省了很多代碼,我們在寫Chinese和American函數的時候,是不是只寫了少量代碼,我們就把父類別行為給繼承過來了,而實例也能呼叫父類別所擁有的行為函數,但是這樣寫,我們還沒有完全實現繼承,因為我們在呼叫hair屬性的時候就根本沒有起到作用,那麼,我們再修改一下程式碼,就可以實現完全繼承了
//遗传继承函数 function Extend(Children,Parent){ //现在我们是从父类实例来继承,所以属性和方法都会被继承的 for(var p in Parent){ if(typeof Children[p] == "undefined"){ Children[p] = Parent[p]; } } } //人类祖先 function Human(){ this.weight = "50kg"; this.height = "180cm"; this.hair = "棕色"; } //吃饭 Human.prototype.Eat = function(){ console.log("吃饭"); } //说话 Human.prototype.Say = function(){ console.log("大家好我是地球人"); } //行走 Human.prototype.Walk = function(){ console.log("我是人类,天生就可以两条腿直立行走"); } //繁衍 Human.prototype.Multiply = function(){ console.log("跟老婆一起做羞羞的事,就是为了人类的繁荣"); } //中国人 function Chinese(){ //调用继承函数 Extend(this,new Human()); } //美国人 function American(){ //调用继承函数 Extend(this,new Human()); }
我們還是要看一下運行的效果是不是跟我們想像中的一樣?
透過上在的程式碼我們不難看出,現在的繼承函數其實是從Human類別的具體實例中複製的屬性及行為,這樣我們就更進一步模擬出了類別的繼承,在上面有一句,我還需要跟大家解釋一下
if(typeof Children[p] == "undefined"){ ...... }
這裡出現的typeof關鍵字其實是一個運算符,是查看某個變數是什麼類型,如果是未定義的情況,運算出的結果就是"undefined" ,所以我就是這樣比較,如果子類別沒有定義過這樣的屬性或行為函數,那麼就從父類別繼承(註:這裡的解釋是為了後面的多型式鋪墊)。
接下來我們再看一下可不可以多重繼承,前面我們已經提到Chinese與American兩個類別都是繼承自Human類,下面我們再寫一個類別來繼承自Chinese
//四川人 function SiChuanMan(){ Extend(this,new Chinese()); }
現在我們已經寫出很健壯的繼承程式碼,理解也非常的簡單,只要在宣告新類別的時候,在建構函式裡面呼叫一下繼承函數,我們就可以實現屬性及行為函數的完全繼承,這樣,我們就可以省下大量的程式碼,OOP思想的優勢再一次地被體現了出來,如果我們要模擬中國每個省份的人,如果我每個省份都照著Human類的方式去寫,從太陽出來寫到第二天的太陽落坡都寫不完。繼承的寫法多種多樣,每個人都有自己的寫法,這裡,我就是以一種最簡單的方式跟大家講解的,到後面大家能熟練使用時候,也可以以自己喜歡的方式去寫,javascript本身就是一門很靈活的語言。
總結一下,我們今天在封裝基礎上進一步做了升級,這樣我們就實現了物件的繼承,書寫的程式碼量被進一步被壓縮,想想能提高工作的效率,更能提高程式碼的優雅度,有一點的小激動呢,只要跟著我腳步走,我們就可以用最簡單的方式去理解最複雜的東西,其實程序並不復雜,複雜的原因是大家沒有得到正確的帶領,本來很簡單的一個東西,被不同的人理解及解釋成不同的東西,這樣學習起來就複雜了,更多的是沒有連續的教程一步一步地帶領大家向正確的方向邁進,所以很長時間都很難得到提升。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。