У меня есть потенциально странный вопрос о this
и плагинах jQuery
Насколько я понимаю, ниже приведен очень простой плагин jQuery:
$.fn.clickclone = function(param){
return this.click(function(){
param.apply(this);
});
};
(делая вид, что это плагинэто как-то расширяет click()
.)
Итак, если я передаю функцию в качестве аргумента, она делает то, что ей нужно, и правильно обращается к this
как узел DOM.Легко.
Мне все ясно.
Что не ясно, есть ли способ, которым я мог бы передать нефункциональный аргумент плагину и получить от него правильный доступ к this
из аргументов?то есть, я мог бы настроить плагин, чтобы сделать что-то вроде этого:
$("#foo").pluginname(["foo", $(this).text() ]);
Так, что для:
<a href="/bar" id="foo">Bar</a>
Это будет правильно передать массив плагину со вторым элементом вмассив, возвращающий значение Bar
?
Я делаю это, в основном, чтобы обеспечить синтаксический сахар для моего плагина, где вы можете передать массив в качестве ярлыка (в дополнение к использованию обычной функции обратного вызова какосновной функционал).За исключением этого, я теряю доступ к использованию this
.Отсюда моя дилемма.
РЕДАКТИРОВАТЬ: Это зло, но, кажется, одна из работ вокруг - передать аргумент в виде строки, а затем eval
. Не реальное решение для меня, но оно иллюстрирует то, что я хотел бы сделать:
$.fn.clickclone = function(param){
return this.click(function(){
if(typeof param === "function"){
param.apply(this);
}
else if(typeof param[1] === "string"){
console.dir("This is evil: " + eval(param[1]));
}
});
};