在CF10中,我想使用TestHelper对象中的onMissingMethod函数访问变量Test对象,但出现错误。
测试文件
component {
public Any function init(){
instance = { x = 1 };
return this;
}
public numeric function getX(){
return instance.x;
}
}
TestHelper.cfc
component {
public Any function init( ){
variables.testObj = new Test();
return this;
}
public any function onMissingMethod( required string missingMethodName, required struct missingMethodArguments ){
var func = variables.testObj[ arguments.missingMethodName ];
return func( argumentCollection = arguments.missingMethodArguments );
}
}
调用对象
obj = new TestHelper();
writeOutput( obj.getX() ); //Element INSTANCE.X is undefined in VARIABLES
在CF10中,这给我一个错误,即元素X在实例中未定义。它似乎无法识别变量实例。我可以在TestHelper中显式定义getX函数,但我希望可以使用onMissingMethod函数。
我是否误解了onMissingMethod应该在这里工作?FWIW,该代码在Railo中有效。
如果我了解您的问题,那么我很惊讶这段代码可以在Railo上运行。我不认为应该。
问题出在以下代码上:
var func = variables.testObj[ arguments.missingMethodName ];
return func( argumentCollection = arguments.missingMethodArguments );
在这里,你是拉功能getX()
出来variables.testObj
,并在你的环境中运行它TestHelper
的实例。该对象没有`variables.x。因此,错误。
您需要将func
参考放入variables.testObj
,而不要getX
退出参考。像这样:
var variables.testObj.func = variables.testObj[ arguments.missingMethodName ];
return variables.testObj.func( argumentCollection = arguments.missingMethodArguments );
这样一来,您将在正确的上下文中运行func()
(您的代理getX()
),因此它将看到variabales.x.
在这种情况下,此代码就不可能在Railo上运行(无论如何,基于您提供给我们的信息都是所有相关信息)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句