Создание копий объекта - обязателен ли 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,
я проверил, работают обе версии кода. Но первый вариант, он как бы компактнее (и понятнее лично для меня). Чем второй вариант лучше? У этих вариантов вообще есть принципиальные различия или это лишь разный стиль написания, а итог будет один? Есть ли различия для браузеров, влияет ли это на скорость выполнения кода, а также на размер используемой памяти? |
Цитата:
Цитата:
Цитата:
|
Riim,
искренне - огромное спасибо! Можно последний вопрос? :) Почему в первом случае онклик-событие снаружи, а во втором - внутри? Я правильно понимаю, что можно и так, и так? Каковы тогда предпосылки и преимущества писать так или так, опять личные предпочтения? |
Цитата:
|
Спасибо большое за все ответы и помощь! :write: :thanks:
|
| Часовой пояс GMT +3, время: 23:47. |