我對面向對象的深刻理解

来源:http://www.cnblogs.com/DongZixin/archive/2017/06/21/7061895.html
-Advertisement-
Play Games

我們之前已經對對象有所瞭解了,現在我們來說一下麵向對象。 我對面向對象的認識是這樣的,所謂的面向對象就是在不懂內部原理的情況下,對它的一個使用。比如在我們的生活中, 去餐廳吃飯時,我們僅只給廚師報上菜名,廚師就會把菜做出來,不需要去告訴廚師要怎樣去做,用什麼做,這就是面向對象 。萬物皆對象,對象就是 ...


我們之前已經對對象有所瞭解了,現在我們來說一下麵向對象。

我對面向對象的認識是這樣的,所謂的面向對象就是在不懂內部原理的情況下,對它的一個使用。比如在我們的生活中,

去餐廳吃飯時,我們僅只給廚師報上菜名,廚師就會把菜做出來,不需要去告訴廚師要怎樣去做,用什麼做,這就是面向對象

。萬物皆對象,對象就是由屬性和方法組成的。面向對象有三大特征,分別是封裝,繼承和多肽。

面向對象面向的是class,面向的是類,而在我們js中是沒有class沒有類的,它基於的原型。創建對象的方法有很多種

,最常用的有6種,分別是字面式、new Object()、工廠方式、構造函數式還有原型鏈創建的對象,最後一種是混合式創建,

就是構造函數和工廠方式組合在一起創建出來的對象。創建好對象之後我們就可以往裡面添加屬性了,我們可以利用this來添

加屬性,但是我們在使用原型鏈創建出來的對象就要用prototype這個屬性去添加了。每個函數都有一個屬性叫做prototype。

這個prototype的屬性值是一個對象,預設的只有一個叫做constructor的屬性,指向這個函數本身。之後我們在創建好對象之

後,我們在調用對象的時候和其他的也是一樣的new一個對象出來,這個對象的名稱一旦使用,比如說var obj=new Object()

這個obj其實指向對象的記憶體地址的一個引用,引用可以調用對象里的屬性和方法。

下麵再來說一下js中面向對象的三大特征,封裝,閉包是封裝的最好體現,說起封裝讓我們不得不回想起變數,變數分為

全局變數和局部變數,全局變數比較簡單,它可以在任何地方訪問到,麻煩就麻煩在局部變數,局部變數一般在函數外是訪問

不到的,這時候我們就可以用閉包了,我們在函數內部在來一個函數,這個函數稱為二次函數,我們一般分為父函數和子函數

,子函數可以訪問到父函數中的變數以及方法,我們稱這個子函數為特權函數,閉包在我們的使用時應該儘量的少使用它,因

為它會占用記憶體,導致記憶體的泄漏,造成系統的崩潰,如果我們使用了的話,可以用標記清除或者引用計數的方法來清除。然

後就是繼承,繼承有三種方式 一種是原型鏈繼承、另一種是構造函數式繼承,最後一種是混合繼承。我們剛纔說過,子函數

可以訪問到父函數的屬性和方法,在原型鏈繼承中,子對象有一個預設的屬性叫__proto___,他指向的是這個方法的本身,而

這個方法的本身是不具有父方法的方法以及屬性的,所以得調用它的prototype的屬性,這個prototype屬性又指向一個對象

,這個對象又是子方法的原型,那麼這個原型他又是用父方法實例化出來的,所以又是他父對象的__proto__,這個__proto__

又指向的父對象本身那個prototype,這個prototype又調用他裡面的屬性和方法,這樣的話就是他的原型鏈繼承。構造函數式

繼承最重要的一點就是冒充,父對象定義在子對象裡面,在子對象裡面可以引用父對象的屬性和方法,在構造函數中有三個參數

需要註意一下,call apply aruments call和apply兩種方法雖然都是繼承屬性,但書寫格式存在不同這裡call方法是通過this

後跟著一個字元串系列而apply方法同樣也是通過this 不過傳屬性則是由數組構成,而argument中有兩個屬性分別是返回執行

函數本身的callee 還有一個形參的個數length,最後一種混合繼承就比較簡單了,就用構造和原型混用的方式來實現繼承的。

最後一個特性是多肽就是一種食物的多種形態,允許將子類型的指針複製給父類類型的指針。

面向對象在實際中用來最多的是寫插件、組件 寫插件的一般步驟是定義一個原型,然後按照要求創建DOM元素,用原生或

js動態地去添加事件和方法,不過特殊事件要特殊處理,比如屏幕事件,屏幕的距離就要特殊處理,面向對象是一種通用思想

,並非只有編程中能用,在任何地方都可以用,面像對象提高了代碼的復用性和可擴展性但是卻降低了性能。

以上就是我對面向對象的理解,謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 工具:python2.7 相關包:traits-4.6.0-cp27-cp27m-win32.whl, VTK-7.1.1-cp27-cp27m-win32.whl, mayavi-4.5.0+vtk71-cp27-cp27m-win32.whl 下載地址:http://www.lfd.uci.ed ...
  • 模塊 1. 模塊的分類 模塊,又稱構件,是能夠單獨命名並獨立地完成一定功能的程式語句的集合(即程式代碼和數據結構的集合體)。 (1)自定義模塊 自己定義的一些可以獨立完成某個功能的一段程式語句,可以是一個文件,也可以是一個目錄。 (2)第三方模塊 是由其他人寫的一些程式語句,我們可以用它來實現自己的 ...
  • 由於第3章第一題網上有很多種非常優秀的解法,我就不貼出來了,大家不妨自己探索。 練習3-2 編寫一個函數escape(s,t),將字元串t複製到字元串s中,併在複製過程中將換行符、製表符等不可見字元分別轉換成'\n'、'\t'等相應的可見的轉義字元序列。要求使用switch語句。再編寫一個具有相反功 ...
  • MyBatis 的配置文件包含了影響 MyBatis 行為甚深的設置(settings)和屬性(properties)信息。文檔的頂層結構如下: configuration 配置 properties 屬性 settings 設置 typeAliases 類型命名 typeHandlers 類型處理... ...
  • 在開始之前呢,先瞭解一下UIView和CALayer大體的區別(重點列舉了以下四點): UIView繼承自 UIResponder,因此UIView 可以處理響應事件,而CALayer繼承自NSObject,所以它只是負責內容的創建,繪製。 UIView負責對內容的管理,而CALayer則是對內容的 ...
  • 題目描述 設有N*N的方格圖(N<=9),我們將其中的某些方格中填入正整數,而其他的方格中則放 人數字0。如下圖所示(見樣例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 ...
  • 方法的覆寫 類和父類有相同的方法,那麼類中方法的訪問許可權不能比父類中對應方法的訪問許可權嚴格,這就叫方法的覆寫,一般稱之為類覆寫了父類中的某個方法 覆寫方法的作用:對於一個類,向上轉換後(把類的實例化對象賦值給類的父類的對象),通過該父類的對象直接訪問該父類的對象的本類部分中被類所覆寫的方法時,將自動 ...
  • 學習設計模式主要是利用早上的時間,習慣於早起,之前學習的一些模式都做了一些記錄,基於自己理解的記錄。還有一些學習過,沒有做記錄的,今天就對他們做一個總結。方便自己以後的使用。 所謂的設計模式,是用的多了,方便,符合幾大原則,有優點就有缺點,有適用場景就有不適用場景,所以模式是固定的,人的思維是不固定 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...