使用onMissingMethod无法访问对象变量

用户名

在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章