在 CF10 中,我想使用 TestHelper 对象中的 onMissingMethod 函数访问变量 Test 对象,但出现错误。
测试.cfc
component {
public Any function init(){
instance = { x = 1 };
return this;
}
public numeric function getX(){
return instance.x;
}
}
测试助手.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 上运行(无论如何,根据您提供给我们的所有相关信息)。
关于coldfusion - 使用 onMissingMethod 无法访问对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951211/