如何正确组织JavaScript代码?

时间:2011-11-09 01:23:17

标签: javascript

我有大量的方法,我想要塑造成一个库。我该如何开始这个过程?

以下是整合工作的结果:我正在尝试决定是否应该为我的整个代码库执行此操作 - 将类似的项目移动到JavaScript对象中。

以下是整个代码库的整合工作:

我应该这样塑造我的代码吗?

合并努力:

var menu = {   

  menu_timer:0,
  menu_element:0,

  /* called when mousing over the top menu item */

  top_mouse_over: function (id) 
    {
    menu.bottom_mouse_over();
    menu.menu_element=document.getElementById(id);
    menu.menu_element.style.visibility='visible';
    },

  /* hide the menu when the timer runs out */

  hide_menu: function()
    {
    if(menu.menu_element)menu.menu_element.style.visibility='hidden';
    },

  /* keeps the menu open by clearing the timer when mousing over the menu items */

  bottom_mouse_over: function() 
    {
    if(menu.menu_timer)
      {
      window.clearTimeout(menu.menu_timer);}
    },

  /* set the timer to hide the menu, required by clearTimeout */

  mouse_out: function() 
    {
    menu.menu_timer=window.setTimeout(menu.hide_menu, 1000);
    }

}; 

整个代码库:

已移至codereview

3 个答案:

答案 0 :(得分:4)

首先,重构。

没有理由使用名为16m6的函数。

一些建议:

  • 使用jQuery,Dojo,Zepto或任何其他库来进行AJAX调用和鼠标/键盘事件。没有理由重新发明轮子。您现在需要在世界上的每个浏览器上测试您的AJAX函数。 jQuery的AJAX功能已经过测试。

  • 尝试使用prettyDate代替view_date

  • 为什么要最小化函数名称?什么原因?压缩机可以为您完成此操作。说真的,你怎么能用这个:

    function m2(a,b){     return document.getElementById(a).innerHTML = b;   }

  • 查看模板函数(例如_.template,jQuery.template,mustache等)。查看可能使您的工作更轻松的验证插件。

  • 您有800行代码。您可以将其设置为200个可读代码行。

  • 关于使它成为库:根据上下文,我通常将它设为jQuery插件或使用_.extend。虽然我选择了比菜单更相关的名称,但将其命名为var menu = {}就足够了。

答案 1 :(得分:1)

您的新方法肯定是一种改进。你应该随意拥有自己的风格,但我会考虑采用documentation generation的传统方法。此外,如果您利用jQueryPrototype之类的库,您将能够适应他们的风格,而不是发明自己的风格。 (我保证不会扼杀你的创造力。)

最后,您可以考虑使用不太可能在全局覆盖的名称来伪命名对象。 “window.menu”让我觉得有些危险。在命名空间时,品牌是您的核心对象。

答案 2 :(得分:1)

阅读Paul Irish(Google Chrome,jQuery)启动页面特定代码的方法。

http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/