Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.05.2010, 14:11
Новичок на форуме
Отправить личное сообщение для heh131 Посмотреть профиль Найти все сообщения от heh131
 
Регистрация: 14.05.2010
Сообщений: 7

Создание копий объекта - обязателен ли prototype?
Добрый день!

Задача - создать объект SPAN и использовать его в разных местах страницы.

Код для создания объекта:
function newSpan(){
	var o=document.createElement("span");
	// установка атрибутов
	o.onclick=function(){Expand(аргументы)}
	return o
}


Создание копий:
obj=new newSpan();


Код работает, но есть опасение, что он не совсем верный, что надо использовать prototype. Подскажите, пожалуйста, верно ли я сомневаюсь или можно спокойно и дальше использовать подобную конструкцию?

А также вопрос, а не лучше ли для этого использовать метод .cloneNode(false)?

Спасибо большое за ответы и помощь!
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2010, 14:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вам даже new не нужен, какой там prototype. Обычная функция, создающая элемент.
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2010, 16:49
Новичок на форуме
Отправить личное сообщение для heh131 Посмотреть профиль Найти все сообщения от heh131
 
Регистрация: 14.05.2010
Сообщений: 7

Kolyaj, спасибо большое за ответ!
А можете чуть поподробнее - в целом я правильно делаю или можно/нужно лучше? Ибо меня именно беспокоит вопрос наиболее качественной реализации этой задачи.
п.с. Спан-ов будет много и у каждого свой onclick event.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2010, 17:29
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Понимать можно так:
document.createElement('div') == new Element('div')
т. е. вы уже создаете экземпляр, и оборачивать его в еще один конструктор смысла нет, достаточно обернуть в функцию.
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2010, 17:36
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Вариант 1:
var newSpan = function() {
  var el=document.createElement("span");
  el.onclick=arguments.callee.onclick;
  return el;
};

newSpan.onclick = function() {Expand(аргументы)};


Вариант 2:
var newSpan = (function() {

var onclick = function() {Expand(аргументы)};

return function() {
  var el=document.createElement("span");
  el.onclick=onclick;
  return el;
};

})();


Вариант 2 мне больше нравится, я почти всегда начинаю со следующей конструкции:
var MyObj = (function() {

return {
  initialize: function() {
    //
  }
};

})();
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2010, 18:46
Новичок на форуме
Отправить личное сообщение для heh131 Посмотреть профиль Найти все сообщения от heh131
 
Регистрация: 14.05.2010
Сообщений: 7

Riim, спасибо огромное!
Попробую второй вариант.

А не подскажите "чайнику", почему во втором варианте есть открывающая скобка перед словом (function, а также все заканчивается конструкцией )(); Закрывающая скобка еще более менее понятна, чтобы закрыть пару, но в целом - зачем они и зачем еще и в конце пара пустых скобок?
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2010, 19:15
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Непонятная структура кода (новичковый вопрос)
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2010, 19:39
Новичок на форуме
Отправить личное сообщение для heh131 Посмотреть профиль Найти все сообщения от heh131
 
Регистрация: 14.05.2010
Сообщений: 7

Riim, спасибо!
Теперь точно сделаю по второму варианту, ибо он стал полностью понятен!
п.с. Кстати, сравнитель текста - классная штука! Буквально на днях нужен был для сравнения конфигураций. Буду теперь использовать Ваш!
Ответить с цитированием
  #9 (permalink)  
Старый 14.05.2010, 20:12
Новичок на форуме
Отправить личное сообщение для heh131 Посмотреть профиль Найти все сообщения от heh131
 
Регистрация: 14.05.2010
Сообщений: 7

Riim,
я проверил, работают обе версии кода. Но первый вариант, он как бы компактнее (и понятнее лично для меня). Чем второй вариант лучше? У этих вариантов вообще есть принципиальные различия или это лишь разный стиль написания, а итог будет один? Есть ли различия для браузеров, влияет ли это на скорость выполнения кода, а также на размер используемой памяти?
Ответить с цитированием
  #10 (permalink)  
Старый 14.05.2010, 21:32
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от heh131
Чем второй вариант лучше?
мне удобней, кому как нравится.

Сообщение от heh131
влияет ли это на скорость выполнения кода
вариант 2 теоретически чуть быстрей.

Сообщение от heh131
а также на размер используемой памяти
вариант 1 теоретически использует меньше памяти.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание объекта при нажатии на который вставка в форму из третьего + примочка Alazaur Общие вопросы Javascript 13 22.09.2010 23:31
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
Prototype v1.4.0 and Prototype v1.5.1_rc3 prihod Prototype & script.aculo.us 2 02.10.2008 16:08
проблема с передачей русского текста в Prototype subaru Prototype & script.aculo.us 2 26.07.2007 16:56