【问题标题】:AS3 Dictionary setPropertyIsEnumerable ignoredAS3 字典 setPropertyIsEnumerable 被忽略
【发布时间】:2011-06-17 11:35:56
【问题描述】:

有人可以向我解释一下为什么 Dictionary 类会忽略 setPropertyIsEnumerable 吗?

我在 bugs.adobe 中发现了 this 错误,似乎原型可能以某种不正当的方式涉及

这是一些测试代码:

var obj:Object = {
    'a': 0,
    'b': 1,
    'c': 2
}

obj.setPropertyIsEnumerable('a', false)

trace("object\n")
for (var op:* in obj)
{
    trace(op)
}

var dict:Dictionary = new Dictionary()
dict['a'] = 0
dict['b'] = 1
dict['c'] = 2

dict.setPropertyIsEnumerable('a', false)

trace("dictionary\n")
for (var dp:* in dict)
{
    trace(dp)
}

这个输出是:

object

c
b
dictionary

c
a
b

请注意,Dictionary 仍在枚举属性“a”,即使它被告知不要这样做。

【问题讨论】:

    标签: actionscript-3 dictionary enumeration


    【解决方案1】:

    这是我的猜测...Dictionary 覆盖 nextName 以返回字典的键。它正在使用它自己的实现,因此它忽略了setPropertyIsEnumerable

    我还不能证明,但我正在努力。我想我会抛出这个假设,看看它是否会引发什么。

    【讨论】:

    • 不,我认为情况并非如此。它不是从Proxy 派生的,因此它不会覆盖nextName。我希望Dictionary 是 Fl​​ex 的一部分,所以我们可以查看源代码。我想知道它在某种程度上是不是一个魔法课程。
    • 嗨,Brian,您的回答很好,是 Linq 引发了这个问题。 toDictionary 方法正在生成修改后的字典。我认为在这种情况下,在 Adob​​e 修复此错误之前需要一个 Dictionary 包装器。我正在考虑这是一个编译器级别的错误。
    • 我同意。为方便起见,添加了length()。我很确定它可以安全地移除。可能应该在 ActionLinq 中添加一个辅助方法,以防有人依赖该行为,但我对此表示怀疑。
    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多