Непонятки с Оперой 
Автор: Evgeny Sergeev
Всегда думал, что самый простой способ определить есть ли метод или свойство в объекте JavaScript - это использовать конструкцию следующего вида:
o = {
foo: function() {}
}
If ("foo" in o){
o.foo();
}
foo: function() {}
}
If ("foo" in o){
o.foo();
}
Но оказалось, что для Opera 10.62 данный способ подходит не всегда и вот тому доказательство:
var request = new XMLHttpRequest;
//true
alert("addEventListener" in request);
//undefined
alert(request.addEventListener);
подписаться на блог
KurokiKaze
Гость
А почему не “if (o && o.foo)”?
По второму коду - может `addEventListener` не в самом объекте `request`, а где то в цепи прототипов. Не знаю как в данном случае должен себя вести `in`.
pepelsbey
Гость
Очень похожая ситуация, которая объясняется в комментариях: http://webreflection.blogspot.com/2010/09/opera-inevitably-unexpected.html
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
KurokiKaze, из соображения наглядности использовать “in” лучше. Да и в случае если o.foo = null Ваш if отработает неверно.
pepelsbey, я как раз написал заметку под влиянием этого поста в webreflection.
Eugene Ivanov
Гость
alert(xhr.removeEventListener);
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
Eugene Ivanov, не понял, что вы этим хотели сказать?
Leave a Reply