Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вызов ф-ции обработчика как метода объекта (https://javascript.ru/forum/misc/40873-vyzov-f-cii-obrabotchika-kak-metoda-obekta.html)

FanAizu 22.08.2013 18:40

вызов ф-ции обработчика как метода объекта
 
Например, устанавливаем обработчик на событие click(юзается jQuery):
$('.button').on('click', muFunction)


Почему нельзя указать вместо обычной ф-ции muFunction, вызов метода у определенного объекта? Как реализовать то, что я описал? Заранее спасибо.

ksa 22.08.2013 19:13

Цитата:

Сообщение от FanAizu
Как реализовать то, что я описал?

Как вариант...

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
var o={
	test: function () {
		alert('Ok!');
	}
};
$(document).ready(function (){
	$('button').click(o.test);
});
</script>
</head>
<body>
<button>Test</button>
</body>
</html>

Цитата:

Сообщение от FanAizu
Почему нельзя указать вместо обычной ф-ции muFunction, вызов метода у определенного объекта?

Т.ч. высказывание ложное. :)

bes 22.08.2013 19:25

можно и так
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<button>click</button>
<script>
function f() {
	return function () {
		alert("click");
	}
}
$("button").on("click", f());
</script>

keen 23.08.2013 10:19

Цитата:

Сообщение от bes (Сообщение 268839)
можно и так
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<button>click</button>
<script>
function f() {
	return function () {
		alert("click");
	}
}
$("button").on("click", f());
</script>

развивая эту идею, можно сделать и вот так:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <button>click</button>
<script> 
function f() {
    return function y() {
        return function z() {
            return function () {
                alert("click");
            }            
        }
    }    
}
$("button").on("click", f()()());
</script>


но нахрена?!

ksa 23.08.2013 10:22

keen, автор спросил

Цитата:

Сообщение от FanAizu
Почему нельзя указать вместо обычной ф-ции muFunction, вызов метода у определенного объекта?

Ему отвечают что есть разные варинты того, что можно указать. И не более того. :)

Яростный Меч 23.08.2013 15:52

Цитата:

Сообщение от FanAizu
Почему нельзя указать вместо обычной ф-ции muFunction, вызов метода у определенного объекта? Как реализовать то, что я описал? Заранее спасибо.

как я понимаю, требуется вместо функции уметь передать связку (объект+метод), чтобы в методе объект был доступен через this?

$('.button').on('click', obj.myMethod.bind(obj))


если bind нету в Function.prototype, его можно добавить вручную.
Как?
искать по словам Function.prototype.bind


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