PDA

Просмотр полной версии : Вопрос по работе Dictionary.hasOwnProperty()


Aloran
19.03.2012, 18:36
Почему такие разные результаты?
1)

public function Main():void
{
var d:Dictionary = new Dictionary();

d["key"] = "dic";

trace(d["key"]); //dic
trace(d.hasOwnProperty("key")); //true
}

2) this можно заменить на любой объект, результат тот же

public function Main():void
{
var d:Dictionary = new Dictionary();

d[this] = "dic";

trace(d[this]); //dic
trace(d.hasOwnProperty(this)); //false
}

-De-
19.03.2012, 19:06
function hasOwnProperty(name:String):Boolean
Потому всё, что попадает в hasOwnProperty конвертится в строку.
Если хотите узнать, есть ли обьект в словаре - используйте in
trace(this in d); //true

wvxvw
20.03.2012, 00:31
hasOwnProperty сообщает о наличии поля (свойства), ключи словаря и индексы массива - не свойства. Просто форма записи доступа к содержанию массива или словаря выглядит так же, как динамический доступ к свойству.
Есть еще один момент, который стоит упомянуть при использовании hasOwnProperty: эта функция объявлена на прототипе класса Object - а это значит что если класс, у экземпляра которого вы ее вызываете не переопределяет ее, то используется именно та, которую плеер сейчас использует в Object.prototype. Object.prototype.hasOwnProperty возможно переопределить во время выполнения программы, поэтому, использование этой функции в местах, где это может оказаться критично (например, вы загружаете чужую SWF и используете hasOwnProperty передавая в нее строку с паролем или другими личными данными пользователя) - вы за это можете поплатиться.

Aloran
20.03.2012, 09:44
спасибо всем огромное!