在CF10中,我想使用TestHelper对象中的onMissingMethod函数访问变量Test对象,但是我收到错误。
Test.cfc
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。
答案 0 :(得分:2)
如果我理解你的问题,我很惊讶这个代码在Railo上运行。我认为不应该。
问题在于此代码:
var func = variables.testObj[ arguments.missingMethodName ];
return func( argumentCollection = arguments.missingMethodArguments );
您要从[{1}}中提取函数getX()
,并在variables.testObj
实例的上下文中运行它。而且这个对象没有`variables.x。因此错误。
您需要将TestHelper
引用放入func
,而不是将variables.testObj
拉出来。像这样:
getX
这样您就可以在正确的上下文中运行var variables.testObj.func = variables.testObj[ arguments.missingMethodName ];
return variables.testObj.func( argumentCollection = arguments.missingMethodArguments );
(代理到func()
),因此会看到getX()
鉴于这种情况,此代码无法在Railo上运行(根据您提供给我们所有相关信息的信息,无论如何)。