Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.07.2015, 22:26
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

Получить this
Привет, ребята, чтото долго меня не было
Пилю лайбрари (джейкверя отдыхает)
Как вычислить this, чтобы можно было применять к нему методы?
// установка обработчиков
_init_.prototype.on = function(event, func, param){
    for(var i = 0; i < this.s.length; i++){
        addEvent(this.s[i], event, func, param);
    }
}


   _A_('a').on('click', function(){
       console.log(this);
       _A_(this).html('111'); // чтобы так можно было делать
   });


функцию AddEvent даже показывать не буду, всё работает
Ответить с цитированием
  #2 (permalink)  
Старый 07.07.2015, 22:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sash003,
вы определитесь где будем менять в 4 строке или в AddEvent ?
Ответить с цитированием
  #3 (permalink)  
Старый 07.07.2015, 23:15
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

Где скажешь Вот она, кроссбраузерная по результатам школьного опроса
function addEvent(elem, type, handler, param){
    param = param || false;
  if(elem.addEventListener){
    elem.addEventListener(type, handler, param);
  } else {
    elem.attachEvent('on'+type, handler);
  }
  return false;
}

Нравится мне яваскрипт всё больше и больше
Ответить с цитированием
  #4 (permalink)  
Старый 07.07.2015, 23:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sash003,
непонял и какой this ты потерял?
Ответить с цитированием
  #5 (permalink)  
Старый 07.07.2015, 23:31
Аватар для sash003
Аспирант
Отправить личное сообщение для sash003 Посмотреть профиль Найти все сообщения от sash003
 
Регистрация: 23.10.2014
Сообщений: 72

Как вычислить this, чтобы можно было применять к нему методы?
_A_(this).html('111'); // чтобы так можно было делать
Сейчас консоля пишет Uncaught SyntaxError: Failed to execute 'querySelectorAll' on 'Document': The provided selector is empty.
Ответить с цитированием
  #6 (permalink)  
Старый 07.07.2015, 23:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

sash003,
может у тебя только строка для инициализации а обьекта не предусмотрено?
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2015, 03:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

sash003, сейчас this и так должен работать, ошибка где-то в другом месте, вестимо там где у тебя используется querySelectorAll. Ставлю на то, что у тябя нет проверки на тип аргумента и this идёт напрямую в querySelectorAll.
__________________
29375, 35

Последний раз редактировалось Aetae, 08.07.2015 в 03:23.
Ответить с цитированием
  #8 (permalink)  
Старый 08.07.2015, 11:54
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

в зависимости от того что находится в this,
месяц назад я тоже велосипедил, и переписал немного свой код(урывок) "под вас"
надеюсь вы розберетесь в моем говнокоде
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
 </head>
 <body>

<a href="http://vk.com">1</a>
<a href="http://vk.com">2</a>
<a href="http://vk.com">3</a>
<a href="http://vk.com">4</a>

<script type="text/javascript">
(function() {
  var Helper = function(elem) {
    return new Helper.fn.init(elem);
  };
	
  Helper.fn = {
    init: function(elem) {
      elem = document.querySelectorAll(elem);
      this[0] = elem;
      return this;
    },

    on: function(event, func, param) {
      for(var i = 0; i < this[0].length; i++){
        addEvent(this[0][i], event, func, param);
      }
    }
};

//addEvent минифицировал что бы не маячило перед глазамы
function addEvent(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent("on"+b,c);return!1};

Helper.fn.init.prototype = Helper.fn;
window.Helper = window.$$ = Helper;
})();

Helper('a').on('click', function(event){
  console.log(this);
  event.preventDefault();
});
</script>

 </body>
</html>


UPD: все работает как ожидалось - переход на vk. com не происходит и в консоли логирует ссылку по которой кликнули
Все же чувствую зря я тогда на github не выложил свой говнокод.... месяц коту под хвост...
Зато есть практика

Последний раз редактировалось KosBeg, 08.07.2015 в 13:12.
Ответить с цитированием
  #9 (permalink)  
Старый 08.07.2015, 12:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

KosBeg,
не решает проблему, elem как и у sash003, только строка а инициализировать надо строку, елемент или nodeList
Ответить с цитированием
  #10 (permalink)  
Старый 08.07.2015, 12:26
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от рони
elem как и у sash003
тоесть вместо моего
elem = document.querySelectorAll(elem);
this[0] = elem;
return this;

у sash003?
elem = document.querySelectorAll(elem);
this.s = elem;
return this;

Ты/Вы уверен/ы?
Мне кажется проблема в том что "главный" метод - _init_ , возвращает "неправильный" this , а точнее "неправильный" this.s
Хотя, имхо конечно =)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
jquery получить родителя и обратится к элементу внутри по class _Eldar_ Общие вопросы Javascript 6 05.04.2015 19:32
Получить все точки отрезка прямой? Gozar Оффтопик 84 29.12.2014 16:18
Получить координаты курсора в текстовом поле в пикселях prike Events/DOM/Window 4 23.05.2013 04:35
Получить значение value - как ? lamer Общие вопросы Javascript 26 12.08.2012 10:33