AHK的對象和類學習心得

;----------------------------------
; AHK的對象和類學習心得 By FeiYue
;----------------------------------

一、簡單對象的使用(細節看幫助)

AHK-V1:
簡單數組 arr:=[111, 222]
關聯數組 arr:={x:111, y:222, id:“abc”}
這兩種可以用 arr[1] 或 arr.x 中括號或點來混合讀寫

AHK-V2:
簡單數組 arr:=[111, 222]
關聯數組 arr:=Map(“x”,111, “y”,222, “id”,“abc”)
原始對象 arr:={x:111, y:222, id:“abc”}
前兩種應該用 arr[1]、arr[“x”] 中括號來讀寫
第三種應該用 arr.x 點來讀寫,不能混用

二、類的使用(復雜對象,包含數據和方法,還可生成新的實例)

AHK的繼承類似Lua和JS,是基于原型的,原型是一個普通的父對象。
原型繼承的原理很簡單,就是找不到就找原型對象,再找不到就再找原型對象。


Lua的繼承原理:

  • 繼承鏈:
    ——>子表中找不到屬性或方法
    ——>設置元表:setmetatable(子表, 元表對象={__index=父表}),
    元表對象是過渡對象,可以使用下面的技巧省去過渡對象,
    父表.__index=父表, setmetatable(子表, 父表)
    ——>在元表對象的__index屬性指向的父表中找,如果找不到
    ——>設置元表:setmetatable(父表, 元表對象={__index=祖父表})
    如果把父表看做類,那么繼承的是類的本身對象。

AHK-V1的繼承原理(類似Lua):

  • 繼承鏈:
    ——>子對象中找不到屬性或方法
    ——>設置基對象:(一般通過new自動設置)子對象.base:=父對象
    ——>再在父對象中找,先考慮其中的元函數__Get沒有明確return,如果找不到
    ——>設置基對象:父對象.base:=祖父對象
    如果把父對象看做類,那么繼承的是類的本身對象。

  • new的處理:子對象:=new 父對象() (這里的父對象一般為類)
    ——>父對象的非靜態屬性賦值給子對象,并運行__new()方法初始化子對象
    ——>設置基對象:子對象.base:=父對象
    父對象的靜態屬性可以被父對象本身使用,非靜態屬性不能。

  • extends的處理:class 子類 extends 父類
    ——>子類.base:=父類


JS的繼承原理:

  • 繼承鏈:
    ——>子對象中找不到屬性或方法
    ——>設置原型:(一般通過new自動設置)子對象.proto=父對象.prototype
    ——>在父對象.prototype屬性對應的對象中找,如果找不到
    ——>設置原型:父對象.prototype.proto=祖父對象.prototype
    如果把父對象看做構造函數,那么繼承的是構造函數的prototype屬性對應的對象。

  • new的處理:子對象=new 父對象() (這里的父對象一般為構造函數)
    ——>父對象的屬性和方法初始化到 父對象.prototype屬性對應的對象中
    ,并運行constructor()方法初始化子對象
    ——>設置原型:子對象.proto=父對象.prototype

  • extends的處理:class 子對象 extends 父對象
    ——>設置原型:子對象.Prototype.proto=父對象.Prototype


AHK-V2的繼承原理(類似JS):

  • 繼承鏈:
    ——>子對象中找不到屬性或方法
    ——>設置基對象:(一般通過new自動設置)子對象.base:=父對象.Prototype
    ——>再在父對象.Prototype屬性對應的對象中找,
    先考慮其中的元函數__Get沒有明確return,如果找不到
    ——>設置基對象:父對象.Prototype.base:=祖父對象.Prototype
    如果把父對象看做類,那么繼承的是類的Prototype屬性對應的對象。

  • new的處理:子對象:=父對象() (這里的父對象一般為類)
    ——>父對象的非靜態屬性和非靜態方法初始化到 父對象.Prototype屬性
    對應的對象中,并運行__new()方法初始化子對象
    ——>設置基對象:子對象.base:=父對象.Prototype
    父對象的靜態屬性和靜態方法、嵌套類不被子對象繼承,由父對象本身使用。

  • extends的處理:class 子類 extends 父類
    ——>設置基對象:子類.base:=父類(用于子類操作父類的靜態屬性和靜態方法)
    ——>設置基對象:子類.Prototype.base:=父類.Prototype(用于實例對象繼承)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39515.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39515.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39515.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型融合知識圖譜的問答系統研究

文章目錄 題目摘要方法實驗消融實驗 題目 大語言模型融合知識圖譜的問答系統研究 論文地址:http://fcst.ceaj.org/CN/10.3778/j.issn.1673-9418.2308070 項目地址:https://github.com/zhangheyi-1/llmkgqas-tcm/ 摘要 問答系統(Question Ans…

C-I-O和多線程

C條件變量 C中的條件變量(Condition Variable)是一種同步原語,用于在多線程程序中阻塞一個或多個線程,直到收到另一個線程的通知。條件變量通常與互斥鎖(Mutex)一起使用,以確保在訪問共享數據時…

【持續更新】vs 編譯過程中的問題及其解決方案

獨立寒秋,湘江北去,橘子洲頭。 目錄 問題 1 : 無法查看或者打開 PDB 文件。 問題 2 : 命令提示符中查看運行結果,控制臺閃退。 問題 3 : 某功能的判斷條件:int val > 1e9,邏輯…

領導高水平,在管人上都會做這3點,讓下屬忠心耿耿

領導高水平,在管人上都會做這3點,讓下屬忠心耿耿 第一點:給到有面子 作為一個領導,一定要在另一方面給自己的下屬做最大努力的爭取,只有把利益給到位,讓你的下屬有面子,才能夠真正的贏得下屬的心…

命令行運行git reflog(reference log)報錯的解決辦法

文章目錄 1. 檢查 Git 是否已安裝2. 檢查 PATH 環境變量3. 重新安裝 Git 在Git中, reflog的英文全稱是 “ reference log”。意思是 引用日志(參考日志)。它記錄了本地倉庫中HEAD和分支引用所指向的提交的變更歷史。這包括了你所有的提交&…

澳大利亞新聞.科技.汽車.旅行.商業類單發媒體

每日簡報Daily Bulletin 澳大利亞西部時間ModernAustralian.com 澳大利亞垂直新聞.科技.汽車.旅行.商業類媒體,ModernAustralian.com是澳大利亞西部地區的一家權威媒體平臺,提供全面的新聞報道、科技資訊、汽車信息、旅行指南、商業動態等內容。每日簡報…

liunx文件系統,日志分析

文章目錄 1.inode與block1.1 inode與block概述1.2 inode的內容1.3 文件存儲1.4 inode的大小1.5 inode的特殊作用 2.硬鏈接與軟鏈接2.1鏈接文件分類 3.恢復誤刪除的文件3.1 案例:恢復EXT類型的文件3.2 案例:恢復XFS類型的文件3.2.1 xfsdump使用限制 4.分析日志文件4.1日志文件4.…

element-ui Tree之懶加載葉子節點強制設置父級半選效果

效果: 前言: 我們是先只展示一級的,二級的數據是通過點擊之后通過服務器獲取數據,并不是全量數據直接一起返回回來的。 問題: 當你設置了默認選中的子節點,但是由于剛進入頁面此時tree中數據暫是沒有這個…

A*——AcWing 179. 八數碼

A* 定義 A* 算法是一種在圖形或地圖中尋找最短路徑的啟發式搜索算法。它通過綜合考慮起始節點到當前節點的實際代價和當前節點到目標節點的預估代價,來決定下一步的搜索方向。 運用情況 路徑規劃:如在地圖導航中為車輛、行人規劃最優路線。游戲開發&…

算法刷題筆記 單調棧(C++實現)

文章目錄 題目描述基本思路實現代碼 題目描述 給定一個長度為N的整數數列,輸出每個數左邊第一個比它小的數,如果不存在則輸出?1。 輸入格式 第一行包含整數N,表示數列長度。第二行包含N個整數,表示整數數列。 輸出格式 共一…

學會python——用python制作一個登錄和注冊窗口(python實例十八)

目錄 1.認識Python 2.環境與工具 2.1 python環境 2.2 Visual Studio Code編譯 3.登錄和注冊窗口 3.1 代碼構思 3.2 代碼實例 3.3 運行結果 4.總結 1.認識Python Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。 Python 的設計具有很強的可讀…

Spring Boot項目中使用MockMvc進行測試的詳細指南

目錄 MockMvc簡介安裝和配置基本用法高級用法集成測試測試最佳實踐總結 MockMvc簡介 MockMvc是Spring框架提供的一種用于測試Spring MVC控制器的工具。它允許開發者在不啟動完整的Web服務器的情況下,模擬HTTP請求并驗證響應。MockMvc的主要優點包括: …

免殺筆記 ---> PE

本來是想先把Shellcode Loader給更新了的,但是涉及到一些PE相關的知識,所以就先把PE給更了,后面再把Shellcode Loader 給補上。 聲明:本文章內容來自于B站小甲魚 1.PE的結構 首先我們要講一個PE文件,就得知道它的結構…

SPI四種模式--極性與相位

SPI的四種模式:相位和極性 極性 定義時鐘空閑狀態: CPOL0:時鐘線在空閑狀態為低電平 CPOL1:時鐘線在空閑狀態為高電平 這個設置決定了設備不進行通信時時鐘線的狀態。 兼容性: 不同的SPI設備可能需要不同的時鐘極性…

java.lang.classnotfoundexception jakarta.xml.bind.jaxbexception java 17問題

解決 <dependency><groupId>jakarta.xml.bind</groupId><artifactId>jakarta.xml.bind-api</artifactId><version>4.0.2</version> </dependency>參考&#xff1a; Handling NoClassDefFoundError for JAXBException in Jav…

【Linux開發實戰指南】基于TCP、進程數據結構與SQL數據庫:構建在線云詞典系統(含注冊、登錄、查詢、歷史記錄管理功能及源碼分享)

目錄 項目演示&#xff1a; 1. 主界面 技術講解&#xff1a; TCP連接 進程的并發 鏈表 SQLite3 IO對文件的讀寫 功能實現 實現邏輯 我遇到的問題&#xff1a; 服務器端代碼思路解析 必要條件 步驟詳解 客戶端代碼思路解析 步驟詳解 服務器源碼如下&#xff1a;…

windows電腦如何運行python的定時任務

這里需要使用&#xff1a;windows系統設置-控制面板里的計劃任務 1.打開計劃任務之后&#xff0c;選擇&#xff1a;創建基本任務 2.填寫名稱&#xff0c;這里根據自己具體的項目需求填寫&#xff0c;然后點擊下一步。 3.選擇每日&#xff0c;再點擊下一步 4.設置時間&…

Python 學習之常用第三方庫(五)

Python 常用第三方庫 Python 是一門功能強大的編程語言&#xff0c;其生態系統中包含了許多優秀的第三方庫&#xff0c;這些庫極大地擴展了 Python 的功能。以下是一些常用的 Python 第三方庫&#xff1a; 1. NumPy&#xff1a; a. 用于數值計算的庫&#xff0c;提供了大量的…

科普文:linux I/O原理、監控、和調優思路

Linux 文件系統 磁盤和文件系統的關系&#xff1a; 磁盤為系統提供了最基本的持久化存儲。 文件系統則在磁盤的基礎上&#xff0c;提供了一個用來管理文件的樹狀結構。 文件系統工作原理 索引節點和目錄項 文件系統&#xff0c;本身是對存儲設備上的文件&#xff0c;進行…

多維度多場景文檔門戶,鴻翼ECM文檔云打造文檔管理新范式

?在現代企業運營中&#xff0c;內容協作的效率直接影響到組織的整體表現和競爭力。傳統的文檔管理系統都是通過目錄結構的方式進行文件管理&#xff0c;在實際業務中無法滿足用戶多視角、多維度、多場景的文檔業務需求。因此&#xff0c;搭建結合文檔體系的業務門戶是許多企業…