Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.03.2013, 16:44
Новичок на форуме
Отправить личное сообщение для potato Посмотреть профиль Найти все сообщения от potato
 
Регистрация: 07.07.2012
Сообщений: 9

Помогите разобраться.
Доброго времени суток.

Читаю книгу "Джон Рейсиг 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) || ''; 
}
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2013, 17:27
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от potato Посмотреть сообщение
name = { 'for': 'htmlFor', 'class': 'className' }[name] || name;
{ 'for': 'htmlFor', 'class': 'className' } - литерал объекта,
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];
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2013, 17:47
Новичок на форуме
Отправить личное сообщение для potato Посмотреть профиль Найти все сообщения от potato
 
Регистрация: 07.07.2012
Сообщений: 9

Спасибо. Теперь понял.
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2013, 21:09
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Что-то автор книги смешал в кучу атрибуты и свойства. Этого делать не стоит. В jQuery есть отдельно метод attr для работы с атрибутами и prop для работы со свойствами. Если все смешать в кучу - возникнет куча непоняток и косяков.

Кроме того, тут получается что при попытке установить атрибут class, код изменит свойство el.className (ок), и еще зачем-то создаст мусорный атрибут classname в не-IE браузерах.

В который раз наблюдаю как во всяких "умных" книжках пишут каку. Наверно и хороших книг то нет на свете по программированию js
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2013, 03:15
Новичок на форуме
Отправить личное сообщение для potato Посмотреть профиль Найти все сообщения от potato
 
Регистрация: 07.07.2012
Сообщений: 9

Сообщение от danik.js
и еще зачем-то создаст мусорный атрибут classname в не-IE браузерах.
Я тоже заметил мусор "classname".

Сообщение от danik.js
В который раз наблюдаю как во всяких "умных" книжках пишут каку.
Ну книга вроде нормальная. Все примеры до этого были хорошо изложены и понятны. Только этот пример какойто кака.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа сервера через iframe и xhr. Помогите разобраться. Arconas AJAX и COMET 0 26.02.2013 10:38
Помогите разобраться: false, null?? eirnvn Общие вопросы Javascript 12 12.11.2012 22:22
Помогите разобраться с this Nigga2102 Элементы интерфейса 4 04.05.2011 18:28
Помогите пожалуйста разобраться Kupu4 Ваши сайты и скрипты 0 21.01.2010 10:44
Помогите разобраться с галереей IMAGIN yana_studio Общие вопросы Javascript 4 12.12.2009 17:24