1

这个周末我在网上阅读了以下内容,我想知道大多数其他人是否认为这是正确(更好)的做事方式。

这不是做事的最佳(正确)方式:

$(文档).ready(函数() {
    $('#magic').click(function(e) {
        $('#yayeffects').slideUp(function() {
            // ...
        });
    });

    $('#happiness').load(url + '#unicorns', function() {
        // ...
    });
});

这更好:

变种 PI = {
    准备就绪:函数(){
        $('#magic').click(PI.candyMtn);
        $('#happiness').load(PI.url + '#unicorns', PI.unicornCb);
    },
    candyMtn:函数(e){
        $('#yayeffects').slideUp(PI.slideCb);
    },
    slideCb:函数(){...},
    独角兽Cb:函数(){...}
};

$(文档).ready(PI.onReady);

一个比下一个表现更好吗?更容易调试?

想法?注释?

4

2 回答 2

1

如果您有一个包含大量匿名函数的堆栈跟踪,则需要花费更多时间来找出错误到底发生在哪里以及从哪里调用它。所以第二个加1。

事件处理程序中的代码通常与注册处理程序的代码没有太大关系,因此应该在单独的函数/模块中。第二个加 1。

对侦听器使用匿名函数也很糟糕,因为如果您必须删除此侦听器(大多数人并不关心),您可以只删除它们,而不必担心从代码的其他部分意外删除其他侦听器. 第二个加 1。

将相关功能放在一个对象中不一定是最好的。如果您将侦听器的行为用于不同的 dom 对象,则大多数情况下 onReady 函数是不好的。

不关心性能。监听器通常不会经常被调用,因为它很重要。如果确实如此,则很可能在其他地方存在问题。

于 2011-02-07T14:00:07.273 回答
0

第二个变体是可重用的 - 您可以重用 slideCb 和其他处理程序以处理其他控件的其他事件。

于 2011-02-07T13:41:59.570 回答