Создание копий объекта - обязателен ли prototype?
Добрый день!
Задача - создать объект SPAN и использовать его в разных местах страницы. Код для создания объекта: function newSpan(){ var o=document.createElement("span"); // установка атрибутов o.onclick=function(){Expand(аргументы)} return o } Создание копий: obj=new newSpan(); Код работает, но есть опасение, что он не совсем верный, что надо использовать prototype. Подскажите, пожалуйста, верно ли я сомневаюсь или можно спокойно и дальше использовать подобную конструкцию? А также вопрос, а не лучше ли для этого использовать метод .cloneNode(false)? Спасибо большое за ответы и помощь! :write: |
Вам даже new не нужен, какой там prototype. Обычная функция, создающая элемент.
|
Kolyaj, спасибо большое за ответ!
А можете чуть поподробнее - в целом я правильно делаю или можно/нужно лучше? Ибо меня именно беспокоит вопрос наиболее качественной реализации этой задачи. п.с. Спан-ов будет много и у каждого свой onclick event. |
Понимать можно так:
document.createElement('div') == new Element('div') т. е. вы уже создаете экземпляр, и оборачивать его в еще один конструктор смысла нет, достаточно обернуть в функцию. |
Вариант 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() { // } }; })(); |
Riim, спасибо огромное!
Попробую второй вариант. А не подскажите "чайнику", почему во втором варианте есть открывающая скобка перед словом (function, а также все заканчивается конструкцией )(); Закрывающая скобка еще более менее понятна, чтобы закрыть пару, но в целом - зачем они и зачем еще и в конце пара пустых скобок? |
|
Riim, спасибо! :thanks:
Теперь точно сделаю по второму варианту, ибо он стал полностью понятен! п.с. Кстати, сравнитель текста - классная штука! Буквально на днях нужен был для сравнения конфигураций. Буду теперь использовать Ваш! :) |
Riim,
я проверил, работают обе версии кода. Но первый вариант, он как бы компактнее (и понятнее лично для меня). Чем второй вариант лучше? У этих вариантов вообще есть принципиальные различия или это лишь разный стиль написания, а итог будет один? Есть ли различия для браузеров, влияет ли это на скорость выполнения кода, а также на размер используемой памяти? |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 10:27. |