请参阅下面的代码。我将有一堆元素,我想运行“公式”所指的任何元素。在代码中,它说“这有用”,它按预期工作。但是我需要触发这些公式,而不明确命名“firstElement”。即使嵌套for循环有点笨重,我认为它应该工作,但它会导致下面列出的错误。如何在不明确命名元素的情况下触发公式?谢谢!
var test:Object = {
element:
[
{ "firstElement":
{
formula:myFunction
}
}
]
}// end test object
public function RunThisFunctionFirst() {
test.element[0].firstElement.formula();//this works
for (var index in test.element){
for (var object in test.element[index]){
trace ("object " + object);// traces "firstElement", as expected
object.formula()// this causes error: Error #1006: value is not a function.
}
}
}
function myFunction (){
trace ("my function called");
}
答案 0 :(得分:2)
使用for each
循环可以简化循环,如前所述,不要忘记键入变量:
for each (var elm:Object in test.element) {
for each (var obj:Object in elm) {
var formula:Function = obj.formula as Function
if (formula!=null) formula()
}
}
答案 1 :(得分:1)
(var object ...)中的变量对象不是类型变量。编译器会将其默认为Object类,当然这不是Function类。尝试将对象转换为函数。我猜你已经从Function类扩展了myFunction。
通过: for(var object:test.element [index]中的函数)
或 for(var object:myFunction ...)//如果myFunction是从Function
扩展的答案 2 :(得分:0)
关于外部循环,element
是一个数组,而不是一个对象,因此您要使用for(;;)
而不是for in
。
关于内循环,object
是字符串"firstElement"
而不是对象。
for (var i:int=0; i < test.element.length; i++)
{
for (var key:* in test.element[i])
{
trace("key " + key);
var object:* = test.element[i][key];
trace("object " + object);
if(typeof object === "object" && object.hasOwnProperty("formula"))
object.formula();
}
}