Цепочка функций
Сделал аналог цепочек jQuery.
код: (function(){ var window = this, undefined, jQuery = window.jQuery = window.$ = function( selector, context ) { return new jQuery.fn.init( selector, context ); }; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { // Если selector - объект, возвращаем его if ( selector.nodeType ) { this[0] = selector; return this; } // В противном случае берем элемент по id var elem = document.getElementById( selector ); var ret = jQuery( elem ); return ret; }, // Наши функции raz: function() { this[0].innerHTML += 'первая пошла, '; return this; }, dva: function() { this[0].innerHTML += 'вторая пошла, '; return this; }, tri: function() { this[0].innerHTML += 'третья пошла '; return this; } }; jQuery.fn.init.prototype = jQuery.fn; })(); sample: <div id='sampleid'></div> <script type="text/javascript"> $('sampleid').raz().dva().tri(); </script> Можно ли использовать такую реализацию цепочек? Какие могут возникнуть проблемы? |
что-то куча связей fn-init-prototype и ненужных оберток
function $(…) { return new $.wrapper(…); } $.wrapper = function (…) { this… = …; }; $.wrapper.prototype = $.prototype = { constructor: $, raz: …, dva: …, tri: … }; Проблем вроде нет, если удобно, ни что не мешает использовать. |
Цитата:
|
Это из jQuery
var // Will speed up references to window, and allows munging its name. window = this, // Will speed up references to undefined, and allows munging its name. undefined, |
Цитата:
1. Самое главное - если он вызывает в дальнейшем код в контексте this, который был присвоен изначально в локальную переменную window (т.е. глобальный объект), то this - всегда будет работать быстрее, т.к. this не резолвится вообще, он определён единожды при входе в контекст, а вот локальная переменная window будет резолвится всегда при обращении. Так что, здесь имеет место быть явное недопонимание, как и почему "оно" так работает. 2. Есть принципиальная разница между объектом window и глобальным объектом (this в глобальном контексте - есть глобальный объект). Первый - это хост-объект, второй - это нативный объект. Да и не всегда, window - рекурсивная ссылка на глобальный объект; в некоторых реализациях это не так (хотя в стандарте - и в 3-ей, и в 5-ой редакциях это отмечается). А тут, получается, автор этого кода сохраняет в локальную переменную глобальный объект (т.е. уже меняет поведение, которое было бы у хост-объекта windiow), и, наивно думает, что это что-то ускорит. Наоборот. Если бы он сделал var window = window, было бы другое дело. А в его случае, удобней было бы всегда использовать this, который был бы определён только один раз, а не постоянно, как window. |
Спасибо.
А разработчикам jQuery это никто не смог объяснить? |
Цитата:
|
Цитата:
1) Тут вполне можно вместо window поставить this Цитата:
Цитата:
Цитата:
кстати, присоединяюсь к PeaceCoder, по поводу использования фреймвороков, порой зайдешь на форум, что бы найти алгоритм решения определенного вопроса, и порой появляется отвращения от всех тем(даже в разделе "для профи"), так как все только и знают, как решить вопрос с помощью фреймворков, а где же чистый javascript, про который наверно уже все забыли...а может и вообще не знали, в итоге появляется стада баранов, а не программистов, у которых спросишь "А ты знаешь javascript?" а они ответят: "да, конечно, это же jQuery", прям даже страшно становиться )))) |
Цитата:
Цитата:
фреймворки vs. JS это тоже самое как Assembler vs C++ или C++ vs VisualBasic Как можно доказывать что высоко уровневый язык быстрее своего родителя? А таких не мало... |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 15:52. |