JavaScript中代码组织常用的最佳实践

随着jQuery等JavaScript框架使客户端Web应用程序更加丰富和功能更强大,我开始注意到一个问题......

你如何保持这种有组织的?

  • 把所有的处理程序放在一个地方,并为所有事件编写函数?
  • 创建函数/类来包装所有的功能?
  • 写得像疯了一样,只是希望它能够最好地工作?
  • 放弃并获得新的职业?
  • 我提到了jQuery,但它通常是任何JavaScript代码。 我发现随着线条开始堆积起来,管理脚本文件或找到您要查找的内容变得更加困难。 我发现最大的可能性是有很多方法可以做同样的事情,很难知道哪一个是目前普遍接受的最佳实践。

    有没有关于如何让你的.js文件像应用程序的其他部分一样漂亮整洁的最佳方法的一般建议? 或者这只是IDE的问题? 那里有更好的选择吗?


    编辑

    这个问题旨在更多地关注代码组织,而不是文件组织。 有一些非常好的合并文件或分割内容的例子。

    我的问题是:目前普遍接受的最佳实践方法是如何组织实际的代码? 你用什么方式,甚至是推荐的方式来与页面元素进行交互,并创建不会相互冲突的可重用代码?

    有些人列出了名字空间 ,这是一个好主意。 还有其他什么方式,更具体地处理页面上的元素并保持代码的组织和整齐?


    如果javascript内置了命名空间,那将会好很多,但是我发现组织Dustin Diaz这样的组织可以帮助我很多。

    var DED = (function() {
    
        var private_var;
    
        function private_method()
        {
            // do stuff here
        }
    
        return {
            method_1 : function()
                {
                    // do stuff here
                },
            method_2 : function()
                {
                    // do stuff here
                }
        };
    })();
    

    我将不同的“命名空间”和有时单独的文件放在不同的文件中。 通常我从一个文件开始,当一个类或名称空间变得足够大以保证它时,我将它分离出它自己的文件。 使用工具来组合所有文件以进行生产也是一个很好的主意。


    我尽量避免在HTML中包含任何javascript。 所有代码都封装到类中,每个类都在它自己的文件中。 对于开发,我有单独的<script>标签来包含每个js文件,但是它们被合并到一个更大的包中进行生产,以减少HTTP请求的开销。

    通常,我将为每个应用程序提供一个“主”js文件。 所以,如果我正在写一个“调查”应用程序,我会有一个名为“survey.js”的js文件。 这将包含jQuery代码的入口点。 我在实例化过程中创建了jQuery引用,然后将它们作为参数传递给我的对象。 这意味着JavaScript类是“纯”的,不包含任何对CSS ID或类名称的引用。

    // file: survey.js
    $(document).ready(function() {
      var jS = $('#surveycontainer');
      var jB = $('#dimscreencontainer');
      var d = new DimScreen({container: jB});
      var s = new Survey({container: jS, DimScreen: d});
      s.show();
    });
    

    我还发现命名约定对于可读性来说很重要。 例如:我在所有的jQuery实例上加上'j'。

    在上面的例子中,有一个名为DimScreen的类。 (假设这会使屏幕变暗并弹出一个警告框。)它需要一个div元素,它可以放大以覆盖屏幕,然后添加一个警告框,以便传入一个jQuery对象。 jQuery有一个插件的概念,但它似乎是有限的(例如,实例不是持久的,不能被访问),没有真正的好处。 所以DimScreen类将是一个标准的JavaScript类,恰好使用jQuery。

    // file: dimscreen.js
    function DimScreen(opts) { 
       this.jB = opts.container;
       // ...
    }; // need the semi-colon for minimizing!
    
    
    DimScreen.prototype.draw = function(msg) {
      var me = this;
      me.jB.addClass('fullscreen').append('<div>'+msg+'</div>');
      //...
    };
    

    我使用这种方法构建了一些相当复杂的应用程序。


    您可以将脚本分成单独的文件进行开发,然后创建一个“发布”版本,将所有脚本塞到一起并运行YUI Compressor或类似的东西。

    链接地址: http://www.djcxy.com/p/5325.html

    上一篇: Commonly accepted best practices around code organization in JavaScript

    下一篇: Having a little issue with an action of my spinner