как корректно обработать ситуацию с отсутствующем свойством объекта?
как корректно обработать ситуацию с отсутствующим свойством объекта?
var Obj = {}; alert(Obj.nonset); //здесь ничего страшного просто undefined alert(Obj.nonset.name); //а тут ошибка в консоли У меня есть объекты, которые в разное время имеют разные свойства И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли |
При обращение к свойству несуществующего поля (равно как и поля, значение которого будет null или undefined) Вы получаете runtime-error вида ReferenceError. Как логировать? Разве что обернуть весь код в try/catch, и отслеживать в catch тип ошибки.
Но оно Вам надо? :) можно просто писать что-то вроде Obj.nonset && alert(Obj.nonset.name); |
Цитата:
<script type="text/javascript"> try { window.ololo.ololo; } catch ( e ) { alert(e.name); } </script> |
Да, с типом я ошибся. ReferenceError будет в ситуации вида
try { I_Do_Not_Exist; } catch(e) { alert(e.name) } |
уточню немного:
объектов очень много и проверки на доступность надоедают :( Использую абстрактные классы. Возможно ли такое: AbstractClass = Ext.extend(Object, { constructor: function(..){ this.curItem = {value: 1}; }, get: function(itemName){ //сдесь чудо код } }); var c = new AbstractClass(); alert(c.get('curItem').value); //здесь 1 alert(c.get('curItem2').value2); //здесь хотелось бы undefined возможно такое? |
Ну, вместо чудо-кода напишите говнокод вида
get: function(itemName){ return this.hasOwnProperty(itemName) ? this.itemName : {}; } Но зачем? |
Цитата:
И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли Возможно это именно то что и нужно было... Но стоит ли овчинка выделки пока не могу понять |
Такое ощущение, что не стоит.
|
Часовой пояс GMT +3, время: 14:00. |