xml - 我是否发现了 AS3 的 XML 类中的错误?

标签 xml actionscript-3 dynamic prototype

让我们先声明一些事实:

Livedocs 告诉我们,动态 类使我们能够添加成员变量和成员函数。我们被告知所有类最终都派生自 Object,它是 dynamic,并且 dynamic 类必须显式标记为这样——继承不会'适用于活力。

对象是一个动态类。 Date 是一个final 动态 类。 XML 是一个final 动态 类。 您可以创建自己的 final 动态 类,它的行为(在动态能力方面)应该与上面的 XMLDate 完全一样。事实上,final 根本不应该影响手头的问题,但我将它包含在我与“有问题的”XML 类的比较中的准确性。

我的代码:

public static function setup():void//Object
{
    //Uncomment each in turn to get results:
    //var o:Object = {};
    //var o:MyFinalDynamicClass = new MyFinalDynamicClass();
    //var o:Date = new Date();
    //var o:XML = new XML();

    o.foo = function():String
    {
        return "Works as expected.";
    }

    trace(o.foo());
}

启用定义了 o 的每一行的结果:

对象:按预期工作。

MyFinalDynamicClass:按预期工作。

日期:按预期工作。

XML:TypeError:错误 #1006:值不是函数。

我使用 Date 是因为它是另一个final dynamic 的核心类。另请注意,成员变量 在上述所有类中工作得很好。只有成员 函数 有问题,而且只在类 XML 中。

我的结论是,并非 AS3 中的每个类都是从 Object 派生的,有些类可能被模拟成那样,但实际上是在 native C++ 中以其他方式派生的,我相信这就是 Adob​​e 用来编写 AS 的方式语言。

问题:你认为我的逻辑有什么缺陷吗?或者这个类真的有问题吗?

附言对于那些对我为什么要向 XML 添加函数感兴趣的人来说,我想要一种方法来封装对我的 XML 数据模型的复杂访问。

最佳答案

根据 livedocs ,XML确实是从Object派生出来的。此外,我认为这根本不是错误,而是 XML 类的预期行为。它只是拒绝您的方法,因为它不是 XML 对象。将其视为运行时检查的类型树。您只能获取/设置其他 XML 对象。尝试以下示例:

var foo:XML = <foo><bar /><bar /></foo>;
trace(foo); // Prints <foo><bar /></foo>

foo.bar = <baz />;
trace(foo); // Prints <foo><baz /></foo>

XML 对象是 XML 的 ActionScript 表示形式,因此实际上发生的事情是我获取所有标记并将它们替换为单个标记。如果您尝试用不是 XML 的东西(即您的方法)替换 XML,它不会理解您想要什么并将值转换为字符串。结果将类似于:

<foo>
  <bar>function Function() {}</bar>
</foo>

您需要构建一个包装器来处理您的处理。

关于xml - 我是否发现了 AS3 的 XML 类中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150453/

相关文章:

java 和 jsp_session expired_redirect

xml - Actionscript/flex3 : Escape XML special characters like <, >, "and ' 标签内容内/内

xml - Excel XML : Formatting inline text

flash - JSFL - 更改静态文本值

flash - 使用 renderMode=GPU 的 iPad AIR 应用程序的性能突然下降

android - Adobe AIR 移动应用程序 (iOS/Android) 的空闲计时器

c - 确定 C 中动态分配内存的大小

dynamic - DLL 和 LIB 文件

javascript - 使用 javascript 查找 xml 属性值

java - java中动态多态性的实时示例是什么