Просмотр полной версии : Вопрос по работе Dictionary.hasOwnProperty()
Почему такие разные результаты?
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
}
function hasOwnProperty(name:String):Boolean
Потому всё, что попадает в hasOwnProperty конвертится в строку.
Если хотите узнать, есть ли обьект в словаре - используйте in
trace(this in d); //true
hasOwnProperty сообщает о наличии поля (свойства), ключи словаря и индексы массива - не свойства. Просто форма записи доступа к содержанию массива или словаря выглядит так же, как динамический доступ к свойству.
Есть еще один момент, который стоит упомянуть при использовании hasOwnProperty: эта функция объявлена на прототипе класса Object - а это значит что если класс, у экземпляра которого вы ее вызываете не переопределяет ее, то используется именно та, которую плеер сейчас использует в Object.prototype. Object.prototype.hasOwnProperty возможно переопределить во время выполнения программы, поэтому, использование этой функции в местах, где это может оказаться критично (например, вы загружаете чужую SWF и используете hasOwnProperty передавая в нее строку с паролем или другими личными данными пользователя) - вы за это можете поплатиться.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.