coldfusion - 使用 onMissingMethod 无法访问对象变量

标签 coldfusion coldfusion-10 railo

在 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/

相关文章:

javascript - 将值传递给模态窗口中的 JavaScript 函数

javascript - 如何在我的 URL 中传递两个 javascript 变量?

coldfusion - coldfusion 10 的 cfhttp 是否仅支持最高 TLS 1.0?

variables - Railo 中的 var 和局部作用域变量之间有明显的区别吗?

pdf - 在使用 cfpdfform 操作之前检查 ColdFusion 中是否存在交互式表单 ="read"

rest - 将数据作为应用程序/JSON 发送会引发错误

jquery-mobile 面板将值传递给 Ajax

coldfusion - 复杂对象类型无法转换为简单值

coldfusion - CFWheels - 我应该在本地确定我的 Wheels 操作吗?

coldfusion - 查找 cffile 上传的源文件路径