Виталий,
- схожие по семантике методы и общие свойства надо выносить в прототип, иначе у тебя каждый новый объект будет иметь свои методы и свойства (ну вот зачем каждому объекту иметь один и тот же массив - this.week = ['Sunday','Monday','Tuesday','Wednesday','Thursday' ,'Friday','Saturday' ] ;? - ему место в прототипе. (Это не единственный случай)). - если хочешь сделать shortcut для метода с длинным названием - сошлись на него, а не плоди новую анонимную функцию: // сжираешь лишние ресурсы Date.prototype.gDt = function() { return this.getDate() ; } // а так - нормально Date.prototype.gDt = Date.prototype.getDate; - Бенчмарки для работы с таблицами устраивались не раз (вот один из них - http://www.quirksmode.org/dom/innerhtml.html); DOM-методы далеко не самые быстрые. |
this.week - ему место в прототипе.
хочу понять, правильно я понимаю, для каждого нового объекта будет создана новая переменная week, с выделенной памятью, а если чере prototype.week то будет ссылка на это массив в Base классе ? но я не понимаю откуда она возьмется, если Base класс не создается ,? |
Мое предложение - шаблоны:
<html> <head> <script type="text/javascript" src="calend.js"></script> </head> <body> <div id="test_div"></div> <script type="text/javascript"> drawT(new Date(2008, 06, 21)); </script> </body> </html> var STR = '<table cellspacing="0" cellpadding="0" border="1" onselectstart="return false;" class="HWCalendar" id="Calendar"><thead><tr><td colspan="8"></td></tr></thead><tbody><tr class="head"><td> </td><td>#mon#</td><td>#tue#</td><td>#wen#</td><td>#thu#</td><td>#fri#</td><td>#sat#</td><td>#sun#</td></tr><tr><td class="day-time">12:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">12:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">01:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">01:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">02:00 AM</td><td/><td class="click"/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">02:30 AM</td><td/><td/><td class="click"/><td/><td/><td/><td/></tr><tr><td class="day-time">03:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">03:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">04:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">04:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">05:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">05:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">06:00 AM</td><td class="click"/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">06:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">07:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">07:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">08:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">08:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">09:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">09:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">10:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">10:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">11:00 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">11:30 AM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">12:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">12:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">01:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">01:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">02:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">02:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">03:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">03:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">04:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">04:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">05:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">05:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">06:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">06:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">07:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">07:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">08:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">08:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">09:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">09:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">10:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">10:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">11:00 PM</td><td/><td/><td/><td/><td/><td/><td/></tr><tr><td class="day-time">11:30 PM</td><td/><td/><td/><td/><td/><td/><td/></tr></tbody></table>'; var DAY = 1000*60*60*24; /* #mon#, #tue#, #wen#, #thu#, #fri#, #sat#, #sun#*/ function getD(_date) { _date.setTime(Date.parse(_date) + DAY); return _date; } function drawT(mondayDate) { var startT = new Date(); document.getElementById('test_div').innerHTML = STR.replace('#mon#', mondayDate).replace('#tue#', getD(mondayDate)).replace('#wen#', getD(mondayDate)).replace('#thu#', getD(mondayDate)).replace('#fri#', getD(mondayDate)).replace('#sat#', getD(mondayDate)).replace('#sun#', getD(mondayDate)); alert(new Date() - startT); } Набросал совсем коротко, строго не судите - времени нет %) Собственно наглый довольно метод, но зато очень простой и наглядный (люблю простоту). По времени не сравнивал, но мне кажется должно быть быстро. Кстати, мне тоже интересны мнения. |
Цитата:
Цитата:
|
Цитата:
|
А можно пример функцияКонструктор.prototype = week при множественном наследовании, чтобы все объекты ссылались на один week ?
// а так - нормально Date.prototype.gDt = Date.prototype.getDate; при создании календаря на 1 год быстрее примерно от 3-7мс! +1 |
Цитата:
P.S.: В сущности, твой подход можно абстрактно-философски (подчеркиваю, т.к. этого нет в JS - для тех, кто любит цепляться к словам) сравнить с примесями (mixin) - ты подмешиваешь в объект свойства из других функций-конструкторов. А в общем, все просто (без подробностей: "восстановление свойства constructor", "проблема холостых выстрелов" и т.д.): function A() {}; A.prototype.week = []; function B() {}; B.prototype = new A(); var b = new B(); // week будет найдено по цепи // прототипов в прототипе А alert(b.week); |
Ладно, все это конечно то, но особого прироста не дает, есть еще идеи ? методы ?
|
Цитата:
|
Часовой пояс GMT +3, время: 13:21. |