Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2012, 19:33   #1
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
Вопрос Вопрос по библиотеке jQuery

Доброго времени суток!

Пишу свой фреймворк на JS для коммерческой CMS, все бы хорошо но вот с глупой ошибкой столкнулся, точнее даже не с ошибкой, а с не удобностью. Написал свойство некоего объекта аналогичное свойству each() в jQuery, но передавая аргументом функции объект слетает оператор this, а точнее он содержит window: вот код jQuery (эталон)):

Код HTML:
<div class="testclass" id="1"></div>
<div class="testclass" id="2"></div>
<div class="testclass" id="3"></div>
Код:
$('.testclass').each(function() {
  alert($(this).attr('id')); //здесь this содержит конкретный элемент из массива
});
в результате выскакивает alert(1, 2, 3)
а вот код для моего фреймворка:

Код HTML:
<div class="testclass" id="1"></div>
<div class="testclass" id="2"></div>
<div class="testclass" id="3"></div>
Код:
$('.testclass').foreach(function(thisis) {
  alert($(this).attr('id')); //здесь this содержит window поэтому alert(undefined, undefined, undefined)
  
  alert($(thisis).attr('id')); //здесь возвращается объект в параметр thisis, но это не очень перспективно и удобно(
});
Подскажите что нужно сделать с основным объектом или с прототипом или с window, чтобы this определялся правильно, а то я уже совсем запутался, firebug меня уже обматерил с ног до головы)

Сам фреймворк скидывать не стал, так как дело в начале объявлений, а вот эти сами объявления:

Код HTML:
function Atjs(a) {
	
	return new core(a)
}

var $ = Atjs;

function core(a) {
	
	this.o = this.find(a);
}

core.prototype = {
	find: function(i) {
		if(typeof i !== 'object')
		{
			var s = i[0]
			
			var o, val = s === '.' || s === '#' ? i.replace(s,''):i;
			
			switch(s) {
				case '.':
					o = document.getElementsByClassName(val);
				break;
				case '#':
					o = document.getElementById(val);
				break;
				default:
					o = document.getElementsByTagName(val);
				break;
			}
		}
		else o=i;
		
		return o;
	},
	и т.п.
}
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 17.01.2012, 20:38   #2
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

Нашел один способ, но это полнейший "костыль" и не решает проблемы:

1. Создал глобальный массив
2. Переписал объект core:

Код:
function core(a) {
	
	this.o = (a !== window)?this.find(a):this.find(objj);
	objj.push(this.o); //запихиваем в глоб. массив
}
но повторяю этот костыль не решение, я проскандировал все 2156 строк кода jQuery, там нет не где подобного костыля, как то ребята решили аналогичную неудобность
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 21.01.2012, 18:49   #3
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

что то совсем нет участия в посте, может вопрос как то не так поставил?
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 21.01.2012, 19:10   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Наберите в гугле "ООП javascript" и увидите, почему не пишут - потому что этот самый ООП (вместе с this) на js можно реализовать сотней способов, каждый день придумывают всякие конструкторы, фреймворки и костыли, чтобы изобразить полноценные классы, там где их нет.
Чтобы вам рассказать, на что указывает this в js в разных случаях, мне понадобится написать статью, чего делать не хочется, благо их в интернете куча.
Что касается примеров, посмотрите лучше в mootools - там оно лучше выглядит, чем в jquery
Cronos20 вне форума Ответить с цитированием
Старый 21.01.2012, 20:34   #5
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
Что касается примеров, посмотрите лучше в mootools - там оно лучше выглядит, чем в jquery
Спасибо обязательно посмотрю.
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по контенту на jQuery SweetOpium JavaScript, Ajax 3 08.12.2011 18:21
Вопрос про jQuery. Arkaim JavaScript, Ajax 5 10.11.2011 21:54
вопрос по библиотеке JIeka Общие вопросы C/C++ 8 26.08.2011 18:19
В библиотеке Mika_32 Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2010 19:00
Вопрос по библиотеке jQuery Help_me JavaScript, Ajax 5 04.03.2009 12:57