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
相关产品推荐
相关产品推荐

