Помогите разобраться.
Доброго времени суток.
Читаю книгу "Джон Рейсиг JavaScript Профессиональные приёмы программирования". Не понял пример из книги. А именно строку с объектом name. Нужна ваша помощь. Пример: function attr(elem, name, value) { // Гарантирование допустимости предоставленного имени if ( !name || name.constructor != String ) return ''; // Определение, не относится ли это имя к тем самым«роковым» // именам name = { 'for': 'htmlFor', 'class': 'className' }[name] || name; /* Не понял вот эту строку. Что здесь происходит? */ // Если пользователь устанавливает значение, то также if ( typeof value != 'undefined' ) { // сначала установить быстрый способ elem[name] = value; // По возможности воспользоватьсяsetAttribute if ( elem.setAttribute ) elem.setAttribute(name,value); } // Вернуть значение атрибута return elem[name] || elem.getAttribute(name) || ''; } |
Цитата:
var temp = { 'for': 'htmlFor', 'class': 'className' } равносильно: var temp = new Object(); temp['for']='htmlFor'; temp['class']='className'; name = что-то || name; равносильно if( что-то ) name = что-то; // else name = name; Все вместе получается примерно так: var temp = new Object(); temp['for']='htmlFor'; temp['class']='className'; if( temp[name] ) name = temp[name]; |
Спасибо. Теперь понял.:)
|
Что-то автор книги смешал в кучу атрибуты и свойства. Этого делать не стоит. В jQuery есть отдельно метод attr для работы с атрибутами и prop для работы со свойствами. Если все смешать в кучу - возникнет куча непоняток и косяков.
Кроме того, тут получается что при попытке установить атрибут class, код изменит свойство el.className (ок), и еще зачем-то создаст мусорный атрибут classname в не-IE браузерах. В который раз наблюдаю как во всяких "умных" книжках пишут каку. Наверно и хороших книг то нет на свете по программированию js |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 02:37. |