Добавление в прототип или валидность функции..?
Хочу добавить функцию .on(), как в jQuery, но без подключения самой библиотеки.
Попытался, ничего не получилось. Помогите, пожалуйста, найти ошибку:
HTMLElement.prototype.on = function (event, func, bool) {
if(func.length) { // *
func = new Function(func[0], func[1]);
}
this.addEventListener(event, func, bool);
};
* - появилась идея добавить интересную возможность: создавать функцию из массива, где 0 - аргументы, а 1 - тело. Т.е. будет не
..., function(a, x) {alert(a+x);}, ...
, а ..., ["a, x", "alert(a+x)"], ... . Работает только с обычной функцией, с массивом - нет. В чём ошибка? Кстати, с if(func instanceof Array) - тоже не работает. Простите за возможное ламерство :з |
Всё, разобрался. Если кому интересно:
HTMLElement.prototype.on = Document.prototype.on = function (event, func, bool) { // добавить событие
if(func instanceof Array) {
func = new Function(func[0], func[1]);
}
this.addEventListener(event, func, bool);
};
HTMLElement.prototype.off = Document.prototype.off = function (event, func, bool) { // удалить событие
if(func instanceof Array) {
func = new Function(func[0], func[1]);
}
this.removeEventListener(event, func, bool);
};
|
Цитата:
Цитата:
|
Цитата:
Ну или пиши object вместо event :p |
Цитата:
Цитата:
Алсо, я же не говорю, что всегда буду юзать именно массив. |
Цитата:
<script>
HTMLElement.prototype.on = Document.prototype.on = function (event, func, bool) { // добавить событие
if(func instanceof Array) {
func = new Function(func[0], func[1]);
}
this.addEventListener(event, func, bool);
};
HTMLElement.prototype.off = Document.prototype.off = function (event, func, bool) { // удалить событие
if(func instanceof Array) {
func = new Function(func[0], func[1]);
}
this.removeEventListener(event, func, bool);
};
var fn = ['e', 'alert("А обработчик-то не удалился!!!")'];
document.on('click', fn);
document.off('click', fn);
</script>
<button>Кликни для теста</button>
|
Кстати, почему HTMLElement, а не Element?
|
Цитата:
Цитата:
|
Цитата:
Твои on/off - это всего лишь врапперы для add/removeEventListener. А они определены в прототипе Element. Так причем тут HTMLElement? |
Вроде на обычную кложу похоже.
ТС, в этом нет практического смысла. В JQ в точности наоборот как я понимаю устроено - там объект наследуется от элемента, в этом есть смысл, это упгрейд, а у вас даунгрейд. |
| Часовой пояс GMT +3, время: 10:58. |