Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中静态函数声明和普通函数声明的区别?_Javascript_Ecmascript 6_Frontend_Static Methods_Es6 Class - Fatal编程技术网

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

Javascript中静态函数声明和普通函数声明的区别?,javascript,ecmascript-6,frontend,static-methods,es6-class,Javascript,Ecmascript 6,Frontend,Static Methods,Es6 Class,有很多方法可以在javascript中声明函数。 其中一种方法是声明一个类,其中包含一个静态函数,如下所示 class className { static fucntionName() { } } function functionName() { } 声明的另一种方式是使用传统的javascript样式,如下所示 class className { static fucntionName() { } } function functionName() { } 我想知道使用这两

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

class className {
 static fucntionName() {
 }
}
function functionName() {
}
声明的另一种方式是使用传统的javascript样式,如下所示

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


我想详细了解一下这一点。

您已经知道,可以从类本身调用
静态方法

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

例如,对于一个
addNumbers(var a,var b)
,它返回a+b
,是否真的需要浪费内存实例化类的一个对象来添加这两个数字?不,你只需要结果,这就是静态的意义所在

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

另一方面,
export
样式的作用完全不同。它允许您使用其他模块的功能

想想这个:

first_module.js

function cube(var x) {
    return x * x * x;
}
import { cube } from 'first_module'; // <-- ERROR
alert( cube(3) ); // <-- Undefined function
second_module.js

function cube(var x) {
    return x * x * x;
}
import { cube } from 'first_module'; // <-- ERROR
alert( cube(3) ); // <-- Undefined function
然后第二个模块将正常工作

什么是静态函数

在类中声明静态函数将创建该函数的实例无法调用的类级函数。函数就是一个例子。静态函数通常用于构建在定义它的类型的实例上操作的函数

我想知道使用这两种情况的优点/缺点

苹果和桔子。类不必导出,模块也不必是类。虽然导出的模块可以是一个类,但它们不是一回事

静态方法是否有任何特定的用例

当您希望一个类提供一些功能,但这不是该类的单个实例所特有的。Like
var c=Point.interpolate(a,b,.5)
静态
interpolate
函数不属于其操作的任何点。在提供此功能的类(插值点)上定义此函数更合适

我们知道,在javascript中,访问静态函数不需要实例化类

这就是静态函数的定义,您不必实例化类来调用它。这不是JS所特有的

为什么不在所有/任何用例中使用函数声明的传统方式(上例中的第二种情况)

因为在我开始的时候,类和模块不一定是一回事。而且写起来更好/更干净

class Foo{
    ...
    static fn(){...}
}

虽然最终,两者都只不过是小巫见大巫

function Foo(){...}
Foo.fn = function(){};
// + Foo.prototype stuff

但是类语法更简洁。更易于阅读和理解,即使您只是浏览这段代码。

静态方法只能在类内调用,并且对于实用函数非常有用,例如,在每次都必须这样做时,对传入的参数变量进行按摩,或设置常量(或前面提到的Object.assign),在传递到类的实例化之前,要避免不必要的内存使用,正如前面的评论员所指出的


清理完所有内容后,您可以导出函数的其余部分,以便在代码中的其他地方进行实例化,每次使用该类时,都会一次又一次地清理参数/设置常量,您的实例化可以集中在动态内容上。

静态方法调用直接在类上进行,不能在类的实例上调用。静态方法通常用于创建实用程序函数。另一方面,export语句用于从给定文件(或模块)导出函数、对象或原语。这两种说法的目的不同,并非同义词。在OO编程中,当函数是类的一部分时,它被称为方法:只有一个带有
静态
方法的类不是类的正确应用。@FelixKling我认为这没有问题。根据很多资料,这也是一个很好的练习。不,这毫无意义。你能链接到其中的一些来源吗?如果只需要函数集合,请使用这些函数创建对象,或者现在使用模块,从模块导出函数。不要滥用类作为函数的包。请查看静态文档()中的示例代码。它只显示带有静态函数的类。我的意思是,谢谢你的回答。你的回答给了我很多关于静态方法的信息。关于我的苹果和橘子,我的问题从来没有关于“导出”,我知道它是什么以及它是如何工作的。我只是好奇地知道用例是静态函数而不是传统的模块化函数。我见过很多应用程序在类中使用静态函数封装api调用/请求,而应用程序的其余部分使用模块化函数,这样做有什么好处吗?这是我的基本问题。我仍然很感激