Словарь AS3 setPropertyIsEnumerable игнорируется - PullRequest
4 голосов
/ 17 июня 2011

Может кто-нибудь объяснить мне, почему класс Dictionary игнорирует setPropertyIsEnumerable?

Я обнаружил эту ошибку на bugs.adobe, кажется, что прототип может быть каким-то хитрым образом вовлечен

Вот тестовый код:

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

Обратите внимание, что в словаре по-прежнему перечисляется свойство "a", хотя было сказано, что нет.

1 Ответ

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

Вот мое предположение ... Dictionary переопределяет nextName, чтобы вернуть ключи словаря. Он использует свою собственную реализацию так, что игнорирует setPropertyIsEnumerable.

Пока не могу доказать, но я пытаюсь. Я думал, что я выброшу эту гипотезу, чтобы увидеть, если она что-нибудь искрится.

...