使用 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 上运行(无论如何,根据您提供给我们的所有相关信息)。
在 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 上运行(无论如何,根据您提供给我们的所有相关信息)。