我希望有人可以解释这种行为,因为我觉得这很令人恼火。我有一个带有 OnMissingMethod 实现的父类,以提供隐式 getter/setter(旧 CF8 应用程序)
如果我将子类实例化为foo并从外部文件调用foo.getBar() ,它会成功触发 OnMissingMethod,但如果在 foo 类本身中调用getBar(),它不会。触发 OnMissingMethod 的唯一方法是如果我使用 this.getBar (),出于美学和代码不一致的原因,我不喜欢它。
tldr; 这是一个代码示例...自己尝试一下。
Foo.cfc
<cfcomponent output="false" extends="Parent">
<cffunction name="init" output="false" returntype="Foo">
<cfreturn this />
</cffunction>
<cffunction name="getInternalBar_workie">
<cfreturn this.getBar() />
</cffunction>
<cffunction name="getInternalBar_noworkie">
<cfreturn getBar() />
</cffunction>
</cfcomponent>
父.cfc
<cfcomponent output="false">
<cffunction name="OnMissingMethod">
<!--- always return true for this example --->
<cfreturn true />
</cffunction>
</cfcomponent>
foobar.cfm
<cfset foo = CreateObject( "component", "Foo").init() />
<!--- this works --->
<cfdump var="#foo.getBar()#" /><br/>
<!--- this works --->
<cfdump var="#foo.getInternalBar_workie()#" /><br/>
<!--- this fails --->
<cfdump var="#foo.getInternalBar_noworkie()#" />
谁能解释为什么在从类本身调用时必须使用“this”范围才能使 OnMissingMethod 正常工作?有更好的解决方法吗?