как корректно обработать ситуацию с отсутствующем свойством объекта?
как корректно обработать ситуацию с отсутствующим свойством объекта?
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, время: 13:17. |