超越在document.ready()中编写简单函数

时间:2016-03-31 21:10:24

标签: javascript jquery refactoring document-ready

在构建网站时,作为个人偏好,我喜欢创建一个主要的javascript文件,它在文件的顶部有window.load和window.ready。

作为一种易读性,我倾向于将这些函数中我想要的任何逻辑重构为它们自己的函数,而且如果元素存在于DOM中,我通常只运行函数。

在大多数情况下,我觉得这比将所有内容直接转储到加载/就绪函数更干净,但随着我的javascript技能的提高,我开始编写更多的匿名函数,我的代码开始看起来有点像随着文档就绪部分开始变长,这种纠结。

出于这个问题的目的,我想知道:

  1. 有没有更好的方法只运行一个函数/代码来检查我的方式长度?
  2. 有没有更好的方法将上述检查纳入我编写插件的方式?
  3. 主要问题:我如何超越编写单个jQuery中心脚本,以此来提高我的javascript技能。
  4. 我提供了一个示例,说明我的文件往往是什么样的。

    $(window).load(function() {
      if ( $('#el-1').length !== 0 ) { $('#el-1').addClass('add'); }
    });
    
    $(document).ready(function() {
      if ( $('#el-2').length !== 0 ) { new my_plugin('#el-2');  }
      if ( $('#el-3').length !== 0 ) { simple_function();  }
      /* This starts to get messy when there's multiple checks, 
      // longer function names, and different libraries etc.
      */
    });
    
    var simple_function = function() {
      //do the short thing
    };
    
    ;(function( window, $ ) {
      'use strict';
      function my_plugin( el, options ) {
        this.el = $(el);
        this.options = $.extend( this.defaults, options );
        this._init();
      }
      my_plugin.prototype = {
        defaults : {
          something: 'something'
        },
        _init : function() {
          // do the things
        }
        _internalFunction: function() {
          // do the things
        },
        externalFunction: function() {
          // do the things
        }
      }
      window.my_plugin = my_plugin;
    })( window , jQuery );
    

1 个答案:

答案 0 :(得分:1)

您的方法在技术上已经正确。其他一切都取决于框架,技术和你使用的装载方法等。否则,这完全是关于意见和惯例。如果您为一家制定了非常严格的代码编写规则的公司工作,那么您必须坚持使用这些规则。

在将代码拆分为多个文件时,可以使用模块定义格式/模式(如requirejs或commonjs)来更好地管理依赖项和模块。

如果您正在讨论javascript和jquery的最佳实践和设计模式,那么以下资源可能有所帮助:

JQuery Boilerplate: 此网站说明了许多示例,并解释了它们被视为最佳做法的方式和原因。 (帮帮我很多)

Learning JavaScript Design Patterns: 这是一本免费的在线书籍,由Google工程师Addy Osmani撰写,他也是jqueryboilerplate.com的开发人员之一

编辑:如果您希望更好地构建代码,那么有关设计模式的书籍会特别有用。