Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   "За" и "против" библиотек работы с DOM и пр. (https://javascript.ru/forum/offtopic/15348-za-i-protiv-bibliotek-raboty-s-dom-i-pr.html)

FINoM 23.02.2011 05:25

"За" и "против" библиотек работы с DOM и пр.
 
Почти досконально изучив jQuery, задался вопросом, стоит ли разбираться в "безбиблиотечной" работы в, первую очередь, с DOM? Конечно, олд-скульный программист в меня кинет помидор, но хотелось бы взвесить все "за" и "против", так как не знаю уже в чем разбираться (взялся за node.js, но так как он не востребован, пока что он входит в ряд "развлечений"). Итак, отличия (привожу только плюсы).

Нативный Яваскрипт
+ Такой программист крут в глазах соответствующих сообществ
+ Может сделать свою библиотеку с блекджеком и хукерами (смысл?)

jQuery
+ jQuery может изучить даже идиот
+ Разработка на jQuery достаточно проста и требует в разы меньше времени (что является плюсом для заказчиков и исполнителей, так как деньги всё те же, а платят за результат)
+ Прост в дебаге из-за меньшего количества кода
+ Не нужно париться о кроссбраузерности
+ Больше заказов (примерно в Inf раз, сужу по буржуйскому фрилансу)

Riim 23.02.2011 05:53

Цитата:

Сообщение от FINoM
в, первую очередь, с DOM

пару часов. Можно в том же jq покопаться. Вы на раздумья больше потратили.

micscr 23.02.2011 09:04

Что то плюсов нативного js вы мало увидели. Причем какие то загадочные.

Я например вообще не разделяю особенно понятия jquery и js. JS - это все, а jquery - просто некая помощь, обертка по программированию DHTML

Если, в качестве дальнейшего саморазвития, хотите вглубь копнуть, можете посмотреть как данный фреймворк сделан. Будет проще чем с jq. Можете extJS начать изучать, но он больше не для сайтов, а для web-приложений. Бывает востребован.

Kolyaj 23.02.2011 09:47

Цитата:

Сообщение от FINoM
jQuery
+ jQuery может изучить даже идиот
+ Разработка на jQuery достаточно проста и требует в разы меньше времени (что является плюсом для заказчиков и исполнителей, так как деньги всё те же, а платят за результат)
+ Прост в дебаге из-за меньшего количества кода
+ Не нужно париться о кроссбраузерности
+ Больше заказов (примерно в Inf раз, сужу по буржуйскому фрилансу)

Если вдруг в jQuery баг, сидим ждём новой версии.
Если какой-то метод jQuery работает чуть чуть не так, как надо, пишем ещё тонну кода, чтобы и jQuery использовать, и так, как нам надо.

А вообще странная тема, изучайте, что хотите, кому какое дело.

B~Vladi 24.02.2011 09:03

Цитата:

Сообщение от FINoM
Нативный Яваскрипт

+ скорость

FINoM 23.03.2011 16:05

Цитата:

Сообщение от micscr
можете посмотреть как данный фреймворк сделан

Спасибо. Но там каментов нету, многое не понятно.

Я вот давно не могу понять, зачем в функцию передавать undefined в качестве аргумента. и в jQuery и в этой библиотеке есть такой момент.

Matre 23.03.2011 16:16

FINoM

Чтобы при запросе undefined интерпретатор не искал его во всех областях видимости, пока не дойдёт до window. Что-то в этом роде. Байтодрочерство, одним словом.

FINoM 23.03.2011 16:16

Не хочется плодить тем с нубскими вопросами, объясните следующую вещь, пожалуйста:
Вот в jQuery можно написать $(nodes).method();
Как без оператора new и дополнения прототипов это сделать?

Matre 23.03.2011 16:18

FINoM

Только по-дурацки. В функции $ цеплять на объект-результат функции все нужные методы.

function $(a) {
	var r = {};
	for (var i = 0; i < a.length бла-бла-бла
		... r[a[i]] = tratata(a, i);
	r.method = function () {...};
	return r;
}
$([]).method();

FINoM 23.03.2011 16:26

Matre, а как в таком случае писать плагины?
В jQuery например они создаются так: $.prototype.newMethod = ...
Я не могу понять, прототип чего именно.

FINoM 23.03.2011 16:28

По сути я просто хочу повторить эффект jQuery, вызывать некую функцию (например, $), передавать туда htmlnode или nodelist, и вызывать методы работающие с содержимым параметра, с возможностью не лезя в код библиотеки добавить новые методы.

Matre 23.03.2011 16:30

Цитата:

а как в таком случае писать плагины?
function $(...) {
	var r = {};
	...
	for (var i in $.prototype)
		r[i] = $.prototype[i];
	...
}

$.prototype.ddd = function () {...};


В-общем, бред.
А чем же Вам неугодны обычные прототипы?

FINoM 23.03.2011 16:33

Цитата:

Сообщение от Matre
А чем же Вам неугодны обычные прототипы?

Говорят, что создание методов для встроенных классов Javascript - плохо. Я стараюсь следовать общепринятым стандартам.
Цитата:

Сообщение от Matre
В-общем, бред.

А может нет?

Matre 23.03.2011 16:34

Каждый раз заново инициализировать методы для каждого объекта — вот это плохо.

FINoM 23.03.2011 16:36

Точно.
Значит вопрос еще актуален.

Спасибо.

Matre 23.03.2011 16:40

Тут всё просто. Перегоняем массив в создаваемый функцией объект, а в плагинах работаем с ним как с обычным массивом:

function $(...) {
	return new $.init(...);
}
$.init = function (...) {
	var I = 0;
	for (...)
		this[I++] = ...
	this.length = I;
};
$.prototype.plugin = function () {
	for (var i = 0; i < this.length; i++) ...
};

Kolyaj 23.03.2011 16:56

Цитата:

Сообщение от FINoM
зачем в функцию передавать undefined в качестве аргумента

Защита от перезаписи переменной undefined.

Цитата:

Сообщение от FINoM
Говорят, что создание методов для встроенных классов Javascript - плохо. Я стараюсь следовать общепринятым стандартам.

"Говорят" и "общепринятые стандарты" немножко разные вещи.

FINoM 23.03.2011 17:55

Matre, круто, спасибо. Только зачем это: this.length = I; ? Понимаю, если бы нужно было очищать список от излишних узлов, но функция $ вызывается единожды, при создании списка узлов, а фильтровать и модифицировать элементы списка будем через методы.
И зачем создавать методы $ через prototype? $.plugin не прокатит?
Цитата:

Сообщение от Kolyaj
Защита от перезаписи переменной undefined.

А что мешает её переопределить?
Цитата:

Сообщение от Kolyaj
"Говорят" и "общепринятые стандарты" немножко разные вещи

Единственным оправданием для расширения встроенных прототипов может быть только воссоздание возможностей более новых движков JavaScript, например функции Array.forEach, которая появилась в версии 1.6. http://shamansir.github.com/JavaScri...ject.prototype
Не знаю как это позиционировать, но возьму себе за правило.

Matre 23.03.2011 18:11

Цитата:

Только зачем это: this.length = I; ?
Потому что this — объект, а не массив, у него нет свойства length. А как же Вы собираетесь перебирать такой объект? Удобнее ведь работать с ним как с обычным массивом, нежели перебирать через for..in

Цитата:

И зачем создавать методы $ через prototype? $.plugin не прокатит?
Не прокатит. this, например, будет в такой функции вообще ссылаться на $.

Kolyaj 23.03.2011 18:12

Цитата:

Сообщение от FINoM
А что мешает её переопределить?

Ничто не мешает, поэтому и защищаются.

Цитата:

Сообщение от FINoM
Единственным оправданием для расширения встроенных прототипов может быть только воссоздание возможностей более новых движков JavaScript

Второе -- удобство использования.


Часовой пояс GMT +3, время: 23:18.