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

Moving beyond writing simple functions within document.ready()

本文关键字:简单 函数 document ready 超越      更新时间:2023-11-09

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

为了便于阅读,我倾向于将这些函数中我想要的任何逻辑重构为它们自己的函数,通常只有当元素存在于DOM中时,我才会运行这些函数。

在大多数情况下,我觉得这比直接将所有内容转储到load/ready函数中更干净,但随着我的javascript技能的提高,我开始编写更多的匿名函数,随着文档准备部分开始变长,我的代码开始看起来有点混乱。

就这个问题而言,我想知道:

  1. 有没有更好的方法只运行一个函数/代码,而不是像我那样检查长度
  2. 有没有更好的方法将上述检查融入我编写插件的方式中
  3. 主要问题:如何超越编写以jQuery为中心的单一脚本,从而提高我的javascript技能

我提供了一个我的文件的外观示例。

$(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 );

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

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

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

JQuery Boilerplate:这个网站展示了许多例子,并解释了它们是如何以及为什么被视为最佳实践的。(帮了我很多)

学习JavaScript设计模式:这是一本免费的在线书籍,作者是谷歌工程师Addy Osmani,他也是jqueryboilerplate.com 的开发人员之一

编辑:如果你想更好地构建代码,这本关于设计模式的书尤其有用。