返回顶部
首页 > 资讯 > 前端开发 > html >javascript中UMD规范有哪些
  • 697
分享到

javascript中UMD规范有哪些

2024-04-02 19:04:59 697人浏览 泡泡鱼
摘要

本篇文章为大家展示了javascript中UMD规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. UMD规范UMD规范,就是所有规范里长得最丑的那个,没

本篇文章为大家展示了javascript中UMD规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1. UMD规范

UMD规范,就是所有规范里长得最丑的那个,没有之一!!!它是为了让模块同时兼容AMD和Commonjs规范而出现的,多被一些需要同时支持浏览器端和服务端引用的第三方库所使用。UMD是一个时代的产物,当各种环境最终实现ES harmony的统一的规范后,它也将退出历史舞台。

UMD规范的结构乍一看非常复杂,主要是因为想要看懂这段范式需要一些javascript基础知识,它的基本结构是这样的:

(function (root, factory) {
 if (typeof define === 'function' && define.amd) {
  // AMD
  define(['Jquery', 'underscore'], factory);
 } else if (typeof exports === 'object') {
  // node, CommonJS之类的
  module.exports = factory(require('jquery'), require('underscore'));
 } else {
  // 浏览器全局变量(root 即 window)
  root.returnExports = factory(root.jQuery, root._);
 }
}(this, function ($, _) {
 // 方法
 function a(){}; // 私有方法,因为它没被返回 (见下面)
 function b(){}; // 公共方法,因为被返回了
 function c(){}; // 公共方法,因为被返回了

 // 暴露公共方法
 return {
  b: b,
  c: c
 }
}));

2. 源码范式推演
2.1 基本结构

先来看最外层的结构:

(function (){}());

非常简单,就是一个自执行函数。既然它是一个模块化的标准,也就意味着这个自执行函数最终可以导出一个模块,那么从代码的角度来讲实际上有两种常见的实现方式:

  1. return返回一个模块;

  2. 实参传入一个对象,把函数内部生成好的需要导出的东西挂在这个对象的属性上;

可以看到上面的函数体内部是没有return语句的,那么可以猜测UMD在实现时是采用了第二种方式。既然UMD是一种模块化的规范,那么它的功能就是根据使用要求生产模块,也就是说它的职责定位叫做模块工厂,我们可以定义一个factory方法,每当执行该方法时,就回返回一个模块,所以它的基本结构就变成了如下的样子:

(function (factory){
 //假设没有使用任何模块化方案,那么将工厂函数执行后返回的内容直接挂载到全局
 window.Some_Attr = factory();
}(function(){
 //自定义模块主体的内容
 
}))

也就是说我们自定义一个匿名函数,然后把它当做实参传给了自执行函数,然后在自执行函数内部通过形参来访问这个工厂方法(或者你会更熟悉回调函数或callback这样的叫法),把它简单地挂在到全局对象上,这样就完成了基本的模块导出。

有的时候我们也希望可以将模块挂载到非全局的环境,将挂载对象动态传入可以让代码变得更灵活,此处涉及到一个基础知识,就是浏览器环境中的全局对象拥有parent,top,self三个属性来追踪页面中嵌入<iframe>后引入的新的Window对象的,单页面Window.self是指向自己的,代码中常通过是否包含self属性来鉴别全局对象,所以此处的写法可以改进为兼容:

(function(root,factory){
 root.Some_Attr = factory();
}(self !== undefined ? self : this, function(){
 
}));

2.2 适配AMD

接着我们先来加入AMD的规范的适配,规范地址:AMD规范GitHub地址:https://github.com/amdjs/amdjs-api/blob/master/AMD.md


(function (factory){
 //判断全局环境是否支持AMD标准
 if(typeof define === 'function' && define.amd){
  //定义一个AMD模块
  define([],factory);
 }
}(function(){
 //自定义模块主体的内容
 
}))

2.3 适配CommonJs

接着我们先来加入CommonJs的规范的适配:


(function (factory){
 //判断全局环境是否支持CommonJs标准
  if(typeof exports === 'object' && typeof define !== 'function'){
    module.exports = factory();
  }
}(function(){
 //自定义模块主体的内容
 
}))

加入对CommonJs的适配后,函数主体中return的内容(一般是一个对象)就被挂载到了module.exports上,如果你编写过node.js代码,对此一定不会陌生。

把上面的片段揉到一块,你也就看懂UMD的样子了。

3. 更具针对性的UMD范式

UMD在其github主页上提供了更具针对性的范式,适用于不同的场景,感兴趣的读者可以自行查看(地址在第一节已经给出)。

javascript中UMD规范有哪些

在此贴一个可能对大多数开发者比较有用的jqueryPlugin的开发范式,如果看懂了上面的分析,那么下面的代码应该不难看懂:

// Uses CommonJS, AMD or browser globals to create a jQuery plugin.
(function (factory) {
 if (typeof define === 'function' && define.amd) {
  // AMD. ReGISter as an anonymous module.
  define(['jquery'], factory);
 } else if (typeof module === 'object' && module.exports) {
  // Node/CommonJS
  module.exports = function( root, jQuery ) {
   if ( jQuery === undefined ) {
    // require('jQuery') returns a factory that requires window to
    // build a jQuery instance, we nORMalize how we use modules
    // that require this pattern but the window provided is a noop
    // if it's defined (how jquery works)
    if ( typeof window !== 'undefined' ) {
     jQuery = require('jquery');
    }
    else {
     jQuery = require('jquery')(root);
    }
   }
   factory(jQuery);
   return jQuery;
  };
 } else {
  // Browser globals
  factory(jQuery);
 }
}(function ($) {
 $.fn.jqueryPlugin = function () { return true; };
}));

4. 模块化开发

前端模块化本身是一个稍显混乱的话题,笔者自己最初也是require( )和require.js傻傻分不清楚,但模块化是前端开发中非常重要的课题,如果你不想一辈子只是在一个页面内写代码,这一关是一定要过的,感兴趣的读者可以按照下面的基本类别划分分块进行学习

javascript中UMD规范有哪些

上述内容就是javascript中UMD规范有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网html频道。

--结束END--

本文标题: javascript中UMD规范有哪些

本文链接: https://lsjlt.com/news/67558.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • javascript中UMD规范有哪些
    本篇文章为大家展示了javascript中UMD规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1. UMD规范UMD规范,就是所有规范里长得最丑的那个,没...
    99+
    2024-04-02
  • JavaScript中有哪些UMD规范
    今天就跟大家聊聊有关JavaScript中有哪些UMD规范,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。说明UMD是AMD和CommonJS的结合。CommonJS模块是根据服务器第...
    99+
    2023-06-20
  • JavaScript有哪些模块规范
    小编给大家分享一下JavaScript有哪些模块规范,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • JavaScript代码规范有哪些
    本篇内容介绍了“JavaScript代码规范有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所有的 J...
    99+
    2024-04-02
  • javascript编写规范有哪些
    这篇文章主要讲解了“javascript编写规范有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript编写规范有哪些”吧!通用规范文件编码...
    99+
    2024-04-02
  • javascript编程规范有哪些
    javascript中的编程规范有:1.函数名,小驼峰式命名法;2.变量名,小驼峰式命名法;3.变量定义,使用var关键字定义;4.对象定义,将属性在构造函数内定义;5.字符串定义,使用单引号 '';6.函数定义,使用命名函...
    99+
    2024-04-02
  • JavaScript的编码规范有哪些
    本篇文章给大家分享的是有关JavaScript的编码规范有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript 文件引用Ja...
    99+
    2024-04-02
  • HTTP中有哪些规范
    这篇文章给大家介绍HTTP中有哪些规范,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.RefererHTTP 标准把 Referrer 写成 Referer(少些了一个 r),可以说...
    99+
    2024-04-02
  • JavaScript编码规范知识点有哪些
    这篇文章主要介绍“JavaScript编码规范知识点有哪些”,在日常操作中,相信很多人在JavaScript编码规范知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • sql规范有哪些
    这篇文章主要为大家展示了“sql规范有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“sql规范有哪些”这篇文章吧。看到itpub的微信发的,搬运一下,应该不...
    99+
    2024-04-02
  • CSS有哪些规范
    这篇文章主要介绍“CSS有哪些规范”,在日常操作中,相信很多人在CSS有哪些规范问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS有哪些规范”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • HTML规范有哪些
    本篇内容主要讲解“HTML规范有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML规范有哪些”吧!HTML 规范缩进统一两个空格缩进命名规范class ...
    99+
    2024-04-02
  • Redis规范有哪些
    这篇“Redis规范有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis规范有哪些”文章吧。redis 功能强大,...
    99+
    2023-06-27
  • codereview规范有哪些
    Code Review的规范可以有很多,这里列举一些常见的规范: 代码风格一致性:确保代码使用统一的缩进风格、命名规范、空格使用、...
    99+
    2023-10-21
    codereview
  • Mysql中有哪些命名规范
    Mysql中有哪些命名规范,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Mysql基本命名原则  1.使用用相同或类似含义英文命名,中...
    99+
    2024-04-02
  • jquery中有哪些代码规范
    这期内容当中小编将会给大家带来有关jquery中有哪些代码规范,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。<!DOCTYPE html> <...
    99+
    2024-04-02
  • C#中有哪些命名规范
    本篇文章给大家分享的是有关C#中有哪些命名规范,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。匈牙利命名法 我最早接触到的命名规范是匈牙利命名法,该方法出自微软,基本上是一些在你...
    99+
    2023-06-17
  • citus中DDL操作规范有哪些
    本篇内容主要讲解“citus中DDL操作规范有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“citus中DDL操作规范有哪些”吧!背景citus是PG的一个...
    99+
    2024-04-02
  • HTML中代码的规范有哪些
    这篇文章主要为大家展示了“HTML中代码的规范有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML中代码的规范有哪些”这篇文章吧。 HTML标记不区...
    99+
    2024-04-02
  • Css中bem书写规范有哪些
    这篇文章主要为大家展示了“Css中bem书写规范有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Css中bem书写规范有哪些”这篇文章吧。  bem是基于组...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作