Rah*_*hul 5 javascript frontend static-methods ecmascript-6 es6-class
可以使用多种方法在javascript中声明函数。一种方法是在内部声明一个类和一个静态函数,如下所示。
class className {
static fucntionName() {
}
}
Run Code Online (Sandbox Code Playgroud)
声明的另一种方法是通过如下所示的传统javascript样式。
export function functionName() {
}
Run Code Online (Sandbox Code Playgroud)
我想知道使用这两种情况的优缺点。静态方法是否有任何特定的用例,为什么要声明一个类(我们知道,在javascript中,无需实例化该类即可访问静态函数)。为什么不在所有用例中使用传统的函数声明方式(上例中的第二种情况)?
我想详细了解一下。
正如您所知,方法static可以从类本身调用。
非static方法可以从类的实例调用,因此您基本上必须先创建一个对象,然后才能访问该方法。
例如,对于 a ,addNumbers(var a, var b)是否return a+b真的有必要浪费内存来实例化该类的对象,只是为了将这两个数字相加?不,您只需要结果,这就是静态的全部意义。
使用第一种样式允许您将方法分组到特定的类中(想想类似于命名空间的东西)。也许您可以定义像Math和 之类的类String,它们都有该add方法,但以不同的方式实现。add()单独调用会令人困惑,但Math.add()和 却String.add()不会。
export另一方面,风格却做了完全不同的事情。它允许您使用另一个模块的功能。
想一想:
第一个模块.js
function cube(var x) {
return x * x * x;
}
Run Code Online (Sandbox Code Playgroud)
第二个模块.js
import { cube } from 'first_module'; // <-- ERROR
alert( cube(3) ); // <-- Undefined function
Run Code Online (Sandbox Code Playgroud)
但是,如果你这样声明first_module:
export function cube(var x) {
return x * x * x;
}
Run Code Online (Sandbox Code Playgroud)
然后第二个模块就可以正常工作了。