You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AutoHotkey V1自定义原型对象方法无法访问属性求助

问题原因

在AutoHotkey V1中,直接将func("myMeth")赋值给对象属性时,调用obj.meth(10)并不会自动把this绑定到obj上。此时this指向全局对象,因此无法访问obj.prop。

解决方案

方案1:使用Func.Bind()绑定对象到函数

通过Bind()方法将obj绑定到函数的this上下文,调用方法时this会直接指向obj:

obj             := {}
obj.prop         := 10
obj.meth         := func("myMeth").Bind(obj)  ; 绑定obj到函数
obj.meth(10)
print(obj.prop)
 
myMeth(inp){
    print("inside myMeth()")            
    print(this.prop)                        ; 输出10
    this.prop := this.prop + inp        
    print(this.prop)                        ; 输出20
}

方案2:利用原型对象定义方法

按照Prototypes章节的规范,将方法定义在原型对象中,让obj继承该原型。调用方法时this会自动指向实例对象:

; 定义原型对象
proto := {}
proto.meth := func("myMeth")

; 创建实例并关联原型
obj := {}
obj.base := proto
obj.prop := 10

obj.meth(10)
print(obj.prop)
 
myMeth(inp){
    print("inside myMeth()")            
    print(this.prop)                        ; 输出10
    this.prop := this.prop + inp        
    print(this.prop)                        ; 输出20
}

方案3:调用时显式传递对象作为this

(不推荐,但可临时使用)通过Call()方法显式指定this指向obj:

obj             := {}
obj.prop         := 10
obj.meth         := func("myMeth")
obj.meth.Call(obj, 10)  ; 显式传递obj作为this
print(obj.prop)
 
myMeth(inp){
    print("inside myMeth()")            
    print(this.prop)                        ; 输出10
    this.prop := this.prop + inp        
    print(this.prop)                        ; 输出20
}

内容的提问来源于stack exchange,提问作者Ralf_Reddings

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:05:14