// codeart.ru / Вопрос/Ответ / Непонятки с Оперой Форум

Непонятки с Оперой rss подписка

Автор: Evgeny Sergeev

Всегда думал, что самый простой способ определить есть ли метод или свойство в объекте JavaScript - это использовать конструкцию следующего вида:

o = {
  foo: function() {}
}
If ("foo" in o){
      o.foo();
}

Но оказалось, что для Opera 10.62 данный способ подходит не всегда и вот тому доказательство:

var request = new XMLHttpRequest;

//true
alert("addEventListener" in request);

//undefined
alert(request.addEventListener);

  1. А почему не “if (o && o.foo)”?

    По второму коду - может `addEventListener` не в самом объекте `request`, а где то в цепи прототипов. Не знаю как в данном случае должен себя вести `in`.

  2. Очень похожая ситуация, которая объясняется в комментариях: http://webreflection.blogspot.com/2010/09/opera-inevitably-unexpected.html

  3. KurokiKaze, из соображения наглядности использовать “in” лучше. Да и в случае если o.foo = null Ваш if отработает неверно.

    pepelsbey, я как раз написал заметку под влиянием этого поста в webreflection.

  4. alert(xhr.removeEventListener);

  5. Eugene Ivanov, не понял, что вы этим хотели сказать?

Leave a Reply

« Зависимость и дублирование Про валидацию »