使用onMissingMethod无法访问对象变量

use*_*775 5 coldfusion railo coldfusion-10

在CF10中,我想使用TestHelper对象中的onMissingMethod函数访问变量Test对象,但是我收到了一个错误.

Test.cfc

component  {

public Any function init(){
    instance = { x = 1 };
    return this;
}

public numeric function getX(){

    return instance.x;

}

}
Run Code Online (Sandbox Code Playgroud)

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 );

}

}
Run Code Online (Sandbox Code Playgroud)

调用对象

obj = new TestHelper();
writeOutput( obj.getX() );  //Element INSTANCE.X is undefined in VARIABLES
Run Code Online (Sandbox Code Playgroud)

在CF10中,这给了我一个错误,即元素X在实例中是未定义的.它似乎没有识别变量实例.我可以在TestHelper中明确定义getX函数,但我希望我可以使用onMissingMethod函数.

我是否误解了如何在这里使用MissingMethod?FWIW,代码在Railo中运行.

Ada*_*ron 2

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

问题出在这段代码上:

var func = variables.testObj[ arguments.missingMethodName ];
return func( argumentCollection = arguments.missingMethodArguments );
Run Code Online (Sandbox Code Playgroud)

在这里,您将函数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 );
Run Code Online (Sandbox Code Playgroud)

这样你就可以在正确的上下文中运行func()(你的代理),所以它会看到getX()variabales.x.

鉴于这种情况,这段代码不可能在 Railo 上运行(无论如何,根据您给我们提供的所有相关信息)。