使用 onMissingMethod 无法访问对象变量

Using onMissingMethod cannot access object variables

在 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 中有效。

如果我理解你的问题,我很惊讶这段代码能在 Railo 上运行。我认为不应该。

此代码有问题:

var func = variables.testObj[ arguments.missingMethodName ];
return func( argumentCollection = arguments.missingMethodArguments );

在这里,您要从 variables.testObj 中提取函数 getX(),并在 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 上运行(无论如何,根据您提供给我们的所有相关信息)。