Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >详解 JavaScript 中的模块、Import和Export

详解 JavaScript 中的模块、Import和Export

作者头像
疯狂的技术宅
发布于 2020-11-26 08:08:22
发布于 2020-11-26 08:08:22
2K00
代码可运行
举报
文章被收录于专栏:京程一灯京程一灯
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 每日前端夜话 第436篇
// 正文共:3000 字
// 预计阅读时间:12 分钟

在互联网的洪荒时代,网站主要用 HTML和 CSS 开发的。如果将 JavaScript 加载到页面中,通常是以小片段的形式提供效果和交互,一般会把所有的 JavaScript 代码全都写在一个文件中,并加载到一个 script 标签中。尽管可以把 JavaScript 拆分为多个文件,但是所有的变量和函数仍然会被添加到全局作用域中。

但是后来 JavaScript 在浏览器中发挥着重要的作用,迫切需要使用第三方代码来完成常见任务,并且需要把代码分解为模块化的文件,避免污染全局命名空间。

ECMAScript 2015 规范在 JavaScript 语言中引入了 module,也有了 import 和 export 语句。在本文中,我们一起来学习 JavaScript 模块,以及怎样用 importexport 来组织代码。

模块化编程

在 JavaScript 中出现模块的概念之前,当我们想要把自己的代码组织为多个块时,一般会创建多个文件,并且将它们链接为单独的脚本。下面先举例说明,首先创建一个 index.html 文件和两个JavaScript文件“ functions.jsscript.js

index.html 文件用来显示两个数字的和、差、乘积和商,并链接到 script 标签中的两个 JavaScript 文件。打开 index.html 并添加以下代码:

index.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>JavaScript Modules</title>
  </head>

  <body>
    <h1>Answers</h1>
    <h2><strong id="x"></strong> and <strong id="y"></strong></h2>

    <h3>Addition</h3>
    <p id="addition"></p>

    <h3>Subtraction</h3>
    <p id="subtraction"></p>

    <h3>Multiplication</h3>
    <p id="multiplication"></p>

    <h3>Division</h3>
    <p id="division"></p>

    <script src="functions.js"></script>
    <script src="script.js"></script>
  </body>
</html>

这个页面很简单,就不详细说明了。

functions.js 文件中包含将会在第二个脚本中用到的数学函数。打开文件并添加以下内容:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function sum(x, y) {
  return x + y
}

function difference(x, y) {
  return x - y
}

function product(x, y) {
  return x * y
}

function quotient(x, y) {
  return x / y
}

最后,script.js 文件用来确定 x 和 y 的值,以及调用前面那些函数并显示结果:

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const x = 10
const y = 5

document.getElementById('x').textContent = x
document.getElementById('y').textContent = y

document.getElementById('addition').textContent = sum(x, y)
document.getElementById('subtraction').textContent = difference(x, y)
document.getElementById('multiplication').textContent = product(x, y)
document.getElementById('division').textContent = quotient(x, y)

保存之后在浏览器中打开 index.html 可以看到所有结果:

对于只需要一些小脚本的网站,这不失为一种有效的组织代码的方法。但是这种方法存在一些问题:

  • 污染全局命名空间:你在脚本中创建的所有变量(sumdifference 等)现在都存在于 window 对象中。如果你打算在另一个文件中使用另一个名为 sum 的变量,会很难知道在脚本的其它位置到底用的是哪一个值变量,因为它们用的都是相同的 window.sum 变量。唯一可以使变量私有的方法是将其放在函数的作用域中。甚至在 DOM 中名为 xid 可能会和 var x 存在冲突。
  • 依赖管理:必须从上到下依次加载脚本来确保可以使用正确的变量。将脚本分别保存存为不同文件会产生分离的错觉,但本质上与放在页面中的单个 <script> 中相同。

在 ES6 把原生模块添加到 JavaScript 语言之前,社区曾经尝试着提供了几种解决方案。第一个解决方案是用原生 JavaScript 编写的,例如将所有代码都写在 objects 或立即调用的函数表达式(IIFE)中,并将它们放在全局命名空间中的单个对象上。这是对多脚本方法的一种改进,但是仍然存在将至少一个对象放入全局命名空间的问题,并没有使在第三方之间一致地共享代码的问题变得更加容易。

之后又出现了一些模块解决方案:CommonJS 是一种在 Node.js 实现的同步方法,异步模块定义(AMD)是一种异步方法,还有支持前面两种样式的通用方法——通用模块定义(UMD)。

这些解决方案的出现使我们可以更轻松地以的形式共享和重用代码,也就是可以分发和共享的模块,例如 npm。但是由于存在许多解决方案,并且都不是 JavaScript 原生的,所以需要依靠 Babel、Webpack 或 Browserify之类的工具才能在浏览器中使用。

由于多文件方法存在许多问题,并且解决方案很复杂,所以开发人员对把模块化开发的方法引入 JavaScript 语言非常感兴趣。于是 ECMAScript 2015 开始支持 JavaScript module

module 是一组代码,用来提供其他模块所使用的功能,并能使用其他模块的功能。export 模块提供代码,import 模块使用其他代码。模块之所以有用,是因为它们允许我们重用代码,它们提供了许多可用的稳定、一致的接口,并且不会污染全局命名空间。

模块(有时称为 ES 模块)现在可以在原生 JavaScript 中使用,在本文中,我们一起来探索怎样在代码中使用及实现。

原生 JavaScript 模块

JavaScript 中的模块使用importexport 关键字:

  • import:用于读取从另一个模块导出的代码。
  • export:用于向其他模块提供代码。

接下来把前面的的 functions.js 文件更新为模块并导出函数。在每个函数的前面添加 export

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function sum(x, y) {
  return x + y
}

export function difference(x, y) {
  return x - y
}

export function product(x, y) {
  return x * y
}

export function quotient(x, y) {
  return x / y
}

script.js 中用 import 从前面的 functions.js 模块中检索代码。

注意import 必须始终位于文件的顶部,然后再写其他代码,并且还必须包括相对路径(在这个例子里为 ./)。 ❞

script.js 中的代码改成下面的样子:

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { sum, difference, product, quotient } from './functions.js'

const x = 10
const y = 5

document.getElementById('x').textContent = x
document.getElementById('y').textContent = y

document.getElementById('addition').textContent = sum(x, y)
document.getElementById('subtraction').textContent = difference(x, y)
document.getElementById('multiplication').textContent = product(x, y)
document.getElementById('division').textContent = quotient(x, y)

注意:要通过在花括号中命名单个函数来导入。

为了确保代码作为模块导入,而不是作为常规脚本加载,要在 index.html 中的 script 标签中添加type="module"。任何使用 importexport 的代码都必须使用这个属性:

index.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script 
  type="module" src="functions.js">
</script>
<script 
  type="module" src="script.js">
</script>

由于受限于 CORS 策略,必须在服务器环境中使用模块,否则会出现下面的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Access to script at 'file:///Users/your_file_path/script.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.

模块与常规脚本不一样的地方:

  • 模块不会向全局(window)作用域添加任何内容。
  • 模块始终处于严格模式。
  • 在同一文件中把同一模块加载两次不会出问题,因为模块仅执行一次
  • 模块需要服务器环境。

模块仍然经常与打包程序(如 Webpack)一起配合使用,用来增加对浏览器的支持和附加功能,但它们也可以直接用在浏览器中。

接下来探索更多使用 importexport 语法的方式。

命名导出

如前所述,使用 export 语法允许你分别导入按名称导出的值。以这个 function.js 的简化版本为例:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function sum() {}
export function difference() {}

这样允许你用花括号按名称导入 sumdifference

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {sum, difference} from './functions.js'

也可以用别名来重命名该函数。这样可以避免在同一模块中产生命名冲突。在这个例子中,sum 将重命名为 add,而 difference 将重命名为 subtract

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {
  sum as add,
  difference as subtract
} from './functions.js'

add(1, 2) // 3

在这里调用 add() 将产生 sum() 函数的结果。

使用 * 语法可以将整个模块的内容导入到一个对象中。在这种情况下,sumdifference 将成为 mathFunctions 对象上的方法。

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as mathFunctions from './functions.js'

mathFunctions.sum(1, 2) // 3
mathFunctions.difference(10, 3) // 7

原始值、函数表达式和定义、异步函数、类和实例化的类都可以导出,只要它们有标识符就行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 原始值
export const number = 100
export const string = 'string'
export const undef = undefined
export const empty = null
export const obj = {name: 'Homer'}
export const array = ['Bart', 'Lisa', 'Maggie']

// 函数表达式
export const sum = (x, y) => x + y

// 函数定义
export function difference(x, y) {
  return x - y
}

// 匿名函数
export async function getBooks() {}

// 类
export class Book {
  constructor(name, author) {
    this.name = name
    this.author = author
  }
}

// 实例化类
export const book = new Book('Lord of the Rings', 'J. R. R. Tolkein')

所有这些导出都可以成功被导入。接下来要探讨的另一种导出类型称为默认导出。

默认导出

在前面的例子中我们导出了多个命名的导出,并分别或作为一个对象导入了每个导出,将每个导出作为对象上的方法。模块也可以用关键字 default 包含默认导出。默认导出不使用大括号导入,而是直接导入到命名标识符中。

functions.js 文件为例:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default function sum(x, y) {
  return x + y
}

script.js 文件中,可以用以下命令将默认函数导入为 sum

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sum from './functions.js'

sum(1, 2) // 3

不过这样做很危险,因为在导入过程中对默认导出的命名没有做任何限制。在这个例子中,默认函数被导入为 difference,尽管它实际上是 sum 函数:

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import difference from './functions.js'

difference(1, 2) // 3

所以一般首选使用命名导出。与命名导出不同,默认导出不需要标识符——原始值本身或匿名函数都可以用作默认导出。以下是用作默认导出的对象的示例:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default {
  name: 'Lord of the Rings',
  author: 'J. R. R. Tolkein',
}

可以用以下命令将其作为 book 导入:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import book from './functions.js'

同样,下面的例子演示了如何将匿名箭头函数导出为默认导出:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export default () => 'This function is anonymous'

可以这样导入:

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import anonymousFunction from './functions.js'

命名导出和默认导出可以彼此并用,例如在这个模块中,导出两个命名值和一个默认值:

functions.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const length = 10
export const width = 5

export default function perimeter(x, y) {
  return 2 * (x + y)
}

可以用以下命令导入这些变量和默认函数:

script.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import calculatePerimeter, {length, width} from './functions.js'

calculatePerimeter(length, width) // 30

现在默认值和命名值都可用于脚本了。

总结

模块化编程设计允许我们把代码分成单个组件,这有助于代码重用,同时还可以保护全局命名空间。一个模块接口可以在原生 JavaScript 中用关键字 importexport 来实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端先锋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Abaqus-Python后处理节点场变量的提取
通常情况下,有限元计算中场变量在结果文件(Abaqus中ODB文件)中的存储主要在单元积分点和节点这两处。应力等状态变量的存储在积分点,而节点存储了节点位移,温度等场变量。
阿信老师CAE
2024/04/16
5730
Abaqus-Python后处理节点场变量的提取
ABAQUS批量提交Job与Python读取ODB结果应力应变数据
这个问题具有一定的普遍性和通用性,普遍性是很多人都会遇到,通用性是指应用场景很广泛,尤其是现在很多人赶时髦搞深度学习和机器学习什么的,需要进行大量计算和数据处理来构建数据集,这就不可避免的要进行批量化处理了,因此对这些问题进行基本的讲解也就有了意义,我原来也写过一些相关文章,点击下面图片可以跳转。
阿信老师CAE
2022/05/17
4.2K0
ABAQUS批量提交Job与Python读取ODB结果应力应变数据
Abaqus-Python后处理Mises应力与应力提取
Abaqus计算结果除了炫目的云图之外,结果文件中的场变量往往也需要我们进行一定的读取和处理,通常情况下可以通过界面选取的方式读取,方式如下
阿信老师CAE
2024/04/03
1.1K0
Abaqus-Python后处理Mises应力与应力提取
基于PYTHON的ABAQUS后处理开发
ABAQUS 的后处理功能不能完全提供我们在分析过程中所需的数据,为更好的扩展后处理功能,查看和分析结果数据,本文提出了使用Python 语言对ABAQUS 进行二次开发来达到这一目的的方法。文中讨论了ABAQUS 的脚本接口和对象模型在二次开发中的作用和调用流程,以及文件的读写与复制、数据读取与处理、结果输出与查看等关键技术。以共轨管锥面密封性的分析为例,使用Python 语言提取了分析结果数据并将结果作为初始条件加载于新的分析中,最终得到所需的分析数据。
用户学习笔记
2022/06/07
1.3K0
如何为ABAQUS结果文件加入新的场变量
ABAQUS软件提供了大量可输出的场变量类型,用来进行结果分析,但仍然有一些场变量ABAQUS软件并不支持,对于这种情形我们可以通过以下两种方式向ABAQUS结果文件中加入:
阿信老师CAE
2024/04/28
8941
如何为ABAQUS结果文件加入新的场变量
ABAQUS免费培训 Abaqus成型 焊接 疲劳多工况课程
在工程中,多工况的情况是普遍存在的情况,而单工况孤立存在是十分理想状态下的假设。例如我们在进行强度分析时,都是假设其本身是不存在应力的,然后基于这种无初始应力下的计算,使得我们不得不放大安全系数来排除初始应力的干扰。
达索SOLIDWORKS科研教育服务
2023/03/10
5820
ABAQUS免费培训 Abaqus成型 焊接 疲劳多工况课程
Python处理Abaqus inp文件
在做科研过程中,有没有遇到过需要批量计算的情况,每次计算的模型都相差不大,只对特定的参数进行更改。在批量计算时,很多时候做的是重复的操作,是否可以采用程序批量化进行建模、分析以及计算?
联远智维
2022/01/20
1.9K0
ABAQUS UEL初步(二)
必须要定义的部分:1、Right-hand-vector:计算单元不平衡力矩阵,外力与内力的差值;2、Jacobian(stiffness) matrix:单元刚度矩阵;3、Solution-dependent state variable。
联远智维
2022/01/20
1K0
ABAQUS UEL初步(二)
Abaqus 文件后缀含义详析及技术支持服务介绍
在使用Abaqus进行有限元分析时,软件会生成多种文件,每种文件通过特定的后缀名标识其功能和内容。这些文件共同支撑建模、求解、后处理及调试的完整流程。理解这些文件的含义和管理方法,能帮助用户高效处理复杂项目、排查错误并优化存储空间。以下分类详解常见文件后缀及其作用。
思茂信息
2025/04/02
1350
Abaqus 文件后缀含义详析及技术支持服务介绍
Abaqus里应用Python的一些技巧
例如:cell4 = mdb.models['block'].parts['crankcase'].cells[4],要把part模块中编号为4的体赋值给cell4,就需通过路径mdb→models→part→cells(4号体属性),其中'block'、'crankcase'、分别是model和part的名字。
分享菌
2022/05/06
9400
Python脚本将ABAQUS结果导出到excel的方法(附代码)
在使用abaqus后处理的过程中,我们常常需要将结果中的某些场变量值导出,如果能将需要的结果直接导出到excel中,甚至在写入表格之前进行一定的计算处理,就能在很大程度节省时间提高效率,降低劳动强度。
阿信老师CAE
2022/05/17
4.7K0
Python脚本将ABAQUS结果导出到excel的方法(附代码)
Abaqus&CST仿真软件功能对比简介
ABAQUS/CAE采用了参数化建模方法,为实际工程结构的参数设计与优化,结构修改提供了有力工具。具有很强的开放性,可以结合 Python 语言方便的定制用户化界面,方便用户操作。
达索SOLIDWORKS科研教育服务
2024/03/06
2331
Abaqus&CST仿真软件功能对比简介
Python数据分析(中英对照)·Random Walks 随机游走
This is a good point to introduce random walks. 这是引入随机游动的一个很好的观点。 Random walks have many uses. 随机游动有许多用途。 They can be used to model random movements of molecules, 它们可以用来模拟分子的随机运动, but they can also be used to model spatial trajectories of people, 但它们也可以用来模拟人的空间轨迹, the kind we might be able to measure using GPS or similar technologies. 我们可以用GPS或类似的技术来测量。 There are many different kinds of random walks, and properties of random walks 有许多不同种类的随机游动,以及随机游动的性质 are central to many areas in physics and mathematics. 是物理学和数学许多领域的核心。 Let’s look at a very basic type of random walk on the white board. 让我们看看白板上一种非常基本的随机行走。 We’re first going to set up a coordinate system. 我们首先要建立一个坐标系。 Let’s call this axis "y" and this "x". 我们把这个轴叫做“y”,这个叫做“x”。 We’d like to have the random walk start from the origin. 我们想让随机游动从原点开始。 So this is position 1 for the random walk. 这是随机游动的位置1。 To get the position of the random walker at time 1, we can pick a step size. 为了得到时间1时随机行走者的位置,我们可以选择一个步长。 In this case, I’m just going to randomly draw an arrow. 在这种情况下,我将随机画一个箭头。 And this gives us the location of the random walker at time 1. 这给了我们时间1的随机游走者的位置。 So this point here is time is equal to 0. 这里的时间等于0。 And this point here corresponds to time equal to 1. 这一点对应于等于1的时间。 We can take another step. 我们可以再走一步。 Perhaps in this case, we go down, say over here. 也许在这种情况下,我们下去,比如说在这里。 And this is our location for the random walker at time t is equal to 2. 这是时间t等于2时,随机游走者的位置。 This is the basic idea behind all random walks. 这是所有随机游动背后的基本思想。 You have some location at time t, and from that location 你在时间t有一个位置,从这个位置开始 you take a step in a random direction and that generates your location 你在一个随机的方向上迈出一步,这就产生了你的位置 at time t plus 1. 在时间t加1时。 Let’s look at these a little bit more mathematically. 让我们从数学的角度来看这些。 First, we’re going to start with the location of the random walk at time t 首先,我们从时间t的随机游动的位置开始 is equal to 0. 等于0。 So position x at time t is equal to 0 is whatever 所以时间t处的位置x等于0是什么 the location of the random walke
数媒派
2022/12/01
5010
Python模块知识6:OS、SYS模块
1、os模块,和系统相关的,比如获取路径、目录、文件夹之类 常用方法: os.getcwd() #获取当前工作目录,即当前Python脚本工作的目录路径 os.rename('oldname','new')#重命名文件/目录 os.path.abspath(path) #返回path规范化的绝对路径,含文件名的 os.path.dirname(path) #获取文件所在的文件夹名称 os.chdir("dirname") #改变当前脚本的工作目录,相当于shell下的cd os.path.join(path
企鹅号小编
2018/01/11
9210
Python模块知识6:OS、SYS模块
有限元平面四边形等差单元python编程
四边形等参单元的刚度矩阵是二重积分式,我想用Maple求解析解,算了很久也没有算出结果。所有我的编程思路是先用 sympy 求出 单元刚度矩阵的符号解,再用lambdify函数将符号解的单元刚度矩阵的各元素转为普通的python函数,最后用scipy进行二重数值积分。
用户6021899
2020/09/24
2.3K1
有限元平面四边形等差单元python编程
为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
我们讲了如何配置Charles代理,这一节我们通过模拟微博登录这个例子来看看如何使用Charles分析网站加载流程,顺便把微博模拟登录的Python代码也给实现了。
一墨编程学习
2019/05/15
2.7K0
为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
Abaqus网格划分的python二次开发问题
我目前是一名硕士一年级的学生,平时也在自己学习ABAQUS简单插件的制作。由于没有查找到资料,所以想请教您一些问题。
阿信老师CAE
2023/03/01
1.1K0
Abaqus网格划分的python二次开发问题
ADINA常见问题解答
Q:怎样改进ADINA-AUI 中实体的显示效果?  A:在某些情况下,ADINA-AUI 显示的实体在边界上不光滑,这仅仅是显示的问题,并不影响几何尺寸的精确度。为了改进显示的效果, 1 点击Modify Mesh Plot 。 2 点击Line Depiction 。 3 将ADINA-M Chord Angle 由默认的0.4改为0.1 并且点击OK。 4 点击Surface Depiction 。 5将ADINA-M Chord Angle 由默认的0.4改为0.1 并且点击OK。 6 点击OK,关闭Modify Mesh Plot 对话框。 Q:为什么AUI 的图形功能在我的计算机上不能正常的工作?  A:有些计算机的显卡在Open GL 图形系统中不能正常的工作。请切换到Windows GDI 图形系统,在Edit 菜单中,点击Graphics System ,然后选择Windows GDI 图形系统。 Q:当我从ADINA-AUI 打印文件时,为什么打印不出来任何结果?  A:注意只有Windows 版本才会发生这样的问题。 当使用Open GL 图形方式时,有的打印机会出现上述问题。为解决该问题,当打印的时候,选择Windows GDI 图形方式。从菜单Edit > Graphics System… 中选择Windows GDI 作为图形系统,然后开始打印。 注意打印结束后,可以将图形系统切换回Open GL 以便获得更快的图形效果。 Q:为什么安装了浮动License(Floating Industry或者Floating Educational)后,Adina无法启动? A:如果安装过程正确,而且电脑上的防火墙不阻止Adina读取服务器上的License,那么这样的问题一般是由于计算机使用了中文名。不论是Adina的服务器还是Adina客户端,都不允许使用中文计算机名。 Q:如何将壳单元厚度显示出来? A:在Display-->Geometry/Mesh Plot-->Modify打开的窗口中点击Element Depiction,在新打开的窗口中的Shell Element Attributes域中选择Top/Bottom(默认是Mid-Surface)。
CAE之家
2022/06/30
1.6K0
ansys随机振动分析_workbench扫频振动仿真
以上六步中,前两步跟单点响应谱分析一样,后四步将在下面作详细讲解。Ansys/Professional产品中不能进展随机振动分析。
全栈程序员站长
2022/11/07
2.7K0
有限元一阶四面体单元python编程(一)
一阶四面体单元,共有4个节点,每个节点有ux, uy, uz 3个自由度,共有12个自由度。一阶四面体单元的位移函数u(x,y,z), v(x,y,z) 和w(x,y,z)均为线性函数,故其单元应变场和单元应力场皆为常量。一阶四面体单元的单元刚度矩阵Ke的公式推导可参考《有限元方法基础教程(第5版)》相关的章节。
用户6021899
2020/11/03
1.7K0
推荐阅读
相关推荐
Abaqus-Python后处理节点场变量的提取
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验