通过字符串触发绑定“功能”与调用函数

我正在处理别人的代码,并遇到了令人困惑的事情。

代码不是调用函数,而是调用绑定函数,然后通过字符串触发它。

例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

下一篇: What does the exclamation mark do before the function?