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(用于实例对象继承)

相关推荐
chu35817724 天前
鼠标前进后退键改双击,键盘映射(AutoHotkey)
windows·计算机外设·autohotkey·按键映射
小Mie不吃饭5 个月前
AHK是让任何软件都支持 Shift + 鼠标滚轮 实现界面水平滚动
vscode·sublime text·记事本·autohotkey·shift+滚轮·水平滚动·高效快捷
也好先生5 个月前
AutoHotKey自动热键(十一)下载SciTE4AutoHotkey-Plus的中文增强版脚本编辑器
自动化·编辑器·计算机外设·快捷键·autohotkey·windows热键
liuyukuan5 个月前
[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
winhttprequest·autohotkey·0x80092004
也好先生5 个月前
AutoHotKey自动热键(七)WINDOWS按键映射与鼠标映射(替换/组合)
自动化·计算机外设·快捷键·autohotkey·windows热键·脚本热键·鼠标键盘映射
liuyukuan5 个月前
[AHK V2]SQLite测试用例
数据库·sqlite·ahk·autohotkey
也好先生6 个月前
AutoHotKey自动热键(二)中文版帮助手册下载和自定义一般键盘快捷键
计算机外设·autohotkey
liuyukuan6 个月前
[AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
ahk·autohotkey·v2
liuyukuan9 个月前
【AHK v2】数据结构LinkedList实现示例
数据结构·ahk·autohotkey·v2