Некоторые вопросы об имени свойства объекта в Actionscript3 - PullRequest
0 голосов
/ 12 апреля 2010

A.as

package
{
    public class A
    {
        public static var someObject:Object = {
            (B.SOME_CONST): { value: 10 }
        };
    }
}

B.as

package
{
    public class B
    {
        public static const SOME_CONST:String = "someStringConst";
    }
}

А это тестовый код.

var obj:Object = A.someObject;
trace(obj.hasOwnProperty(B.SOME_CONST));
trace(obj.hasOwnProperty("someStringConst"));
trace(obj.hasOwnProperty("SOME_CONST"));

Я ожидал, что результат будет true, true, false, но реальный результат - false, false, true. Почему?

1 Ответ

0 голосов
/ 12 апреля 2010

По какой-то причине изменение строки на (B["SOME_CONST"]): {value:10} работает, хотя скобки все равно должны быть там. Я не смог найти причину, почему это так. Это, безусловно, ошибка.

Сначала я подумал, что это проблема с синтаксическим анализатором, спотыкающимся о точку или что-то в этом роде, но после еще нескольких тестов, похоже, это не так:

package
{
    public class A
    {
        public var someObject:Object = {
            (C.b["SOME_CONST"]): { value: 10 }
        };
    }
}
package {
    public class B
    {
        public static const SOME_CONST:String = "someStringConst";
    }
}
package {
    public class C
    {
        public static var b:Class = B;
    }
}

Если бы это была проблема с синтаксическим анализатором, он разрешился бы до b["SOME_CONST"] и, таким образом, исключение времени выполнения. Тем не менее, код работает, как и ожидалось, без проблем.

Так что это действительно интересно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...