Цепочка функций
Сделал аналог цепочек 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, время: 22:15. |