通过字符串触发绑定“功能”与调用函数
我正在处理别人的代码,并遇到了令人困惑的事情。
代码不是调用函数,而是调用绑定函数,然后通过字符串触发它。
例1:
bind("hello.world", function(){
console.log("hello world");
});
trigger("hello.world");
而不是 - -
例2:
helloWorld = function(){
console.log("hello world");
}
helloWorld();
例1和例2有什么优点和缺点?谢谢。
那么,因为JavaScript是一种事件驱动的编程语言,我会推荐第一个。
下面是一个例子,说明使用事件处理程序而不是简单函数调用的优点:
function someEventHandler(){
if($(this).hasClass('some-class'))
// do something
}
$('element').bind('eventName.eventNamespace',someEventHandler);
现在,如果你只是简单地调用这个函数,例如:
someEventHandler();
你可以看到它不起作用,因为它被设计为在dom元素上下文中执行。
如果触发具有someEventHandler
函数的事件,因为它是event-handler:
$('element').trigger('eventName.eventNamespace');
该函数在元素上下文中调用,如下所示:
someEventHandler.call($('element').get(0));
这将会产生预期的效果。
此外,可以将多个事件处理程序绑定到同一事件并将其绑定到多个元素。
如果你想为每个dom元素列表调用一个函数,你将不得不这样做:
someEventHandler.call($('element1').get(0));
someEventHandler.call($('element2').get(0));
someEventHandler.call($('element3').get(0));
// ... and so on
而使用第一种方法则更容易:
$('element1,element2,element3').bind('eventName.eventNamespace',someEventHandler);
$('element1,element2,element3').trigger('eventName.eventNamespace');
请注意,您采用的方法取决于您使用这些功能的上下文。 如果你的函数与dom元素无关,或者你不想让更多的对象订阅你的事件,你可能应该保持简单并使用经典的函数声明和调用。
链接地址: http://www.djcxy.com/p/355.html上一篇: triggering a bind "function" via string versus calling a function