javascript - Javascript 中静态函数声明和普通函数声明的区别?

标签 javascript ecmascript-6 frontend static-methods es6-class

在 javascript 中声明函数的方法有很多种。 其中一种方法是在其中声明一个类和一个静态函数,如下所示。

class className {
 static fucntionName() {
 }
}

另一种声明方式是通过传统的 javascript 样式,如下所示。

function functionName() {
}

我想知道使用这两种情况的优点/缺点。 静态方法是否有任何特定的用例,为什么要声明一个类(我们知道在javascript中不需要实例化类来访问静态函数)。 为什么不在所有/任何用例中使用传统的函数声明方式(上例中的第二种情况)?

我想详细了解一下。

最佳答案

如您所知,static 方法可从类本身调用。

static 方法可从类的实例 调用,因此您基本上必须先创建一个对象才能访问该方法。

例如,对于 返回 a+baddNumbers(var a, var b),是否真的有必要浪费内存来实例化该类的对象只是为了添加这两个数字?不,您只需要结果,这就是静态的全部意义。

使用第一种样式允许您将方法分组到特定类中(想想命名空间之类的东西)。也许您可以定义像 MathString 这样的类,它们都有 add 方法,但实现方式不同。单独调用 add() 会令人困惑,但 Math.add()String.add() 不会。

export 风格,另一方面,做了完全不同的事情。它允许您使用来自另一个模块的功能。

想想这个:

first_module.js

function cube(var x) {
    return x * x * x;
}

second_module.js

import { cube } from 'first_module'; // <-- ERROR
alert( cube(3) ); // <-- Undefined function

但是,如果您这样声明 first_module:

export function cube(var x) {
    return x * x * x;
}

然后 second_module 就可以正常工作了。

关于javascript - Javascript 中静态函数声明和普通函数声明的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594196/

相关文章:

javascript - 防止 Firefox 自动完成弹出

javascript - React hooks 使用 <span> 标签中的样式,但没有绘制样式

javascript - 使用 "this": "TypeError: Cannot read property ' renderElapsedString' of undefined"导入函数并获取 props

javascript - 无法在单击事件上获取动态创建的容器的高度

javascript - 使驻留在通过 AJAX 调用调用的函数内的代码同步运行

javascript - 如果我不使用 “` 的初始值,为什么会得到 `flattenDeep(...)` TypeError` : `reduce` is not iterable”, ?

javascript - 当方法分配给变量时,ES6 失去作用域

html - 是否有允许构建跨浏览器兼容的 html 和 css 代码的程序或框架?

javascript - jQuery 确定 div 中的任何输入是否获得焦点

javascript - 使用 VueJS 和 Django 时的空白页面