Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.09.2010, 13:25
Аспирант
Отправить личное сообщение для miha-ha Посмотреть профиль Найти все сообщения от miha-ha
 
Регистрация: 03.09.2010
Сообщений: 39

как корректно обработать ситуацию с отсутствующем свойством объекта?
как корректно обработать ситуацию с отсутствующим свойством объекта?
var Obj = {};
alert(Obj.nonset); //здесь ничего страшного просто undefined
alert(Obj.nonset.name); //а тут ошибка в консоли

У меня есть объекты, которые в разное время имеют разные свойства
И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли

Последний раз редактировалось miha-ha, 29.09.2010 в 13:29.
Ответить с цитированием
  #2 (permalink)  
Старый 29.09.2010, 13:56
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

При обращение к свойству несуществующего поля (равно как и поля, значение которого будет null или undefined) Вы получаете runtime-error вида ReferenceError. Как логировать? Разве что обернуть весь код в try/catch, и отслеживать в catch тип ошибки.
Но оно Вам надо?
можно просто писать что-то вроде
Obj.nonset && alert(Obj.nonset.name);
Ответить с цитированием
  #3 (permalink)  
Старый 29.09.2010, 14:10
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Цитата:
Вы получаете runtime-error вида ReferenceError
Не совсем:

<script type="text/javascript">
	try {
		window.ololo.ololo;
	} catch ( e ) {
		alert(e.name);
	}
</script>
Ответить с цитированием
  #4 (permalink)  
Старый 29.09.2010, 15:00
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Да, с типом я ошибся. ReferenceError будет в ситуации вида
try { 
    I_Do_Not_Exist; 
} catch(e) { 
    alert(e.name) 
}
Ответить с цитированием
  #5 (permalink)  
Старый 29.09.2010, 17:53
Аспирант
Отправить личное сообщение для miha-ha Посмотреть профиль Найти все сообщения от miha-ha
 
Регистрация: 03.09.2010
Сообщений: 39

уточню немного:
объектов очень много и проверки на доступность надоедают
Использую абстрактные классы. Возможно ли такое:
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


возможно такое?

Последний раз редактировалось miha-ha, 29.09.2010 в 18:03.
Ответить с цитированием
  #6 (permalink)  
Старый 29.09.2010, 18:17
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Ну, вместо чудо-кода напишите говнокод вида
get: function(itemName){
    return this.hasOwnProperty(itemName) ? this.itemName : {};
}


Но зачем?
Ответить с цитированием
  #7 (permalink)  
Старый 29.09.2010, 18:49
Аспирант
Отправить личное сообщение для miha-ha Посмотреть профиль Найти все сообщения от miha-ha
 
Регистрация: 03.09.2010
Сообщений: 39

Сообщение от e1f Посмотреть сообщение
Ну, вместо чудо-кода напишите говнокод вида
get: function(itemName){
    return this.hasOwnProperty(itemName) ? this.itemName : {};
}


Но зачем?
У меня есть объекты, которые в разное время имеют разные свойства
И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли

Возможно это именно то что и нужно было...
Но стоит ли овчинка выделки пока не могу понять
Ответить с цитированием
  #8 (permalink)  
Старый 29.09.2010, 18:57
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Такое ощущение, что не стоит.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как корректно применить последовательность fadeOut, html, fadeIn? SkyZee jQuery 2 02.09.2010 18:27
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 21:41
О наследовании событий, или как корректно его отменить. JCShen Events/DOM/Window 8 09.02.2010 00:00
Как по событию вызвать метод определенного экземпляра объекта jvs jQuery 3 24.12.2009 16:04
как узнать тип значения объекта? VHS Общие вопросы Javascript 1 07.01.2009 23:57