Получить 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 даже показывать не буду, всё работает :yes: |
sash003,
вы определитесь где будем менять в 4 строке или в AddEvent ?:) |
Где скажешь :) Вот она, кроссбраузерная по результатам школьного опроса
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; } Нравится мне яваскрипт всё больше и больше :) |
sash003,
непонял и какой this ты потерял? |
Как вычислить this, чтобы можно было применять к нему методы?
_A_(this).html('111'); // чтобы так можно было делать Сейчас консоля пишет Uncaught SyntaxError: Failed to execute 'querySelectorAll' on 'Document': The provided selector is empty. |
sash003,
может у тебя только строка для инициализации а обьекта не предусмотрено? |
sash003, сейчас this и так должен работать, ошибка где-то в другом месте, вестимо там где у тебя используется querySelectorAll. Ставлю на то, что у тябя нет проверки на тип аргумента и this идёт напрямую в querySelectorAll.
|
в зависимости от того что находится в this,
месяц назад я тоже велосипедил, и переписал немного свой код(урывок) "под вас" :lol: надеюсь вы розберетесь в моем говнокоде :yes: <!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 не выложил свой говнокод.... месяц коту под хвост... Зато есть практика :D |
KosBeg,
не решает проблему, elem как и у sash003, только строка а инициализировать надо строку, елемент или nodeList |
Цитата:
elem = document.querySelectorAll(elem); this[0] = elem; return this; у sash003? elem = document.querySelectorAll(elem); this.s = elem; return this; Ты/Вы уверен/ы? Мне кажется проблема в том что "главный" метод - _init_ , возвращает "неправильный" this , а точнее "неправильный" this.s Хотя, имхо конечно =) |
Часовой пояс GMT +3, время: 06:02. |