as3 неявный указатель на функцию - PullRequest
1 голос
/ 30 июня 2011

Пожалуйста, смотрите код ниже. У меня будет куча элементов, которые я хочу запустить для этого элемента, на что ссылается «формула». В коде, где написано «это работает», все работает как положено. Однако мне нужно запустить эти формулы, не называя «firstElement» явно. Несмотря на то, что вложенный цикл является немного неуклюжим, я думаю, что он должен работать, но это вызывает ошибку, перечисленную ниже. Как я могу запустить формулы, не называя элементы явно? Спасибо!

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

    }

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Используя цикл 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 голос
/ 30 июня 2011

Ваш переменный объект, в (var object ...) не является типизированной переменной.Компилятор по умолчанию это класс Object, который, конечно, не является классом Function.Попробуйте привести объект в качестве функции.Я предполагаю, что вы расширили myFunction из класса Function.

либо: for (объект var: функция в test.element [index])

или for (объект var: myFunction ...) //, если myFunction расширена от Function

0 голосов
/ 30 июня 2011

Что касается внешнего цикла, 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...