Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как вызвать callback функцию (https://javascript.ru/forum/jquery/24859-kak-vyzvat-callback-funkciyu.html)

oke11o 17.01.2012 11:45

Как вызвать callback функцию
 
Здравствуйте.
Пишу плагин для jQuery. Новые методы пишу в $.fn.extend({...});
В один из таких методов в качестве параметра передаю название следующей функции.
Как вызвать такую функцию, название которой передал в параметре функции?
$obj.validateDate(saveStartDate);

    $.fn.extend({
		validateDate: function (сallBack) {
						  this.сallBack();
					  },
		saveStartDate: function () {
						  console.log('saveStartDate');
					   },
	});	//end $.fn.extend

Skipp 17.01.2012 12:24

this[сallBack]()
не?

Kolyaj 17.01.2012 12:31

Передавать надо не имя функции, а саму функцию, и контекст, в котором нужно вызвать эту функцию.

Skipp 17.01.2012 12:34

Kolyaj,
А почему бы и нет, получается своеобразный switch.

Kolyaj 17.01.2012 12:38

Где тут switch?

oke11o 17.01.2012 12:45

Цитата:

Сообщение от Skipp (Сообщение 151021)
this[сallBack]()

Да, спасибо, работает!

Цитата:

Сообщение от Kolyaj (Сообщение 151023)
Передавать надо не имя функции, а саму функцию, и контекст, в котором нужно вызвать эту функцию.

Я так и пытался сделать, но не получается. В приведенном мной примере передается не строка, а функция. Но не знаю, как ее выполнить. То есть как указать контекст? Если подскажите как, буду очень благодарен.

Skipp 17.01.2012 12:48

А в чём именно проблема?
Пример:
function e(func){
	func();
}

e(function(){alert(1)});

oke11o 17.01.2012 13:08

:-?
Сейчас работает. Хм. Где-то ошибся, потому как не работало до этого.
Спасибо.

Skipp 17.01.2012 13:11

Kolyaj,
Разьве совсем не похоже?
var pswitch = function(){
	this.e = function(){
		var args = Array.prototype.slice.call(arguments);
		this[args.shift()].apply(this, args);
		return this;
	}
	this.func1 = function(){alert(1)};
	this.func2 = function(){alert(2)};
	this.func3 = function(t){alert(t);};
};

var i = new pswitch();
i.e('func1').e('func2').e('func3', 3);

Kolyaj 17.01.2012 13:14

Нет, не похоже. Замена switch объектом -- известный паттерн. Непонятно, зачем он здесь нужен.

Skipp 17.01.2012 13:21

Всё ясно. На вкус и цвет...
Моё мнение, что они всё таки похожи, но спорить не буду.

Kolyaj 17.01.2012 13:31

Главный вопрос не в том, похожи или не похожи, а зачем это нужно в данном случае.

Skipp 17.01.2012 13:36

Kolyaj,
Я про необходимость ничего и не писал, тем более это всё равно решать не нам.
Лишь ответил на вопрос:
Цитата:

Как вызвать такую функцию, название которой передал в параметре функции?


Часовой пояс GMT +3, время: 12:08.