我以这种方式定义了班级
class className {
constructor() {
}
static myStaticFunction() {
console.log("myStaticFunction")
}
normalFunction() {
console.log("normalFunction")
}
}
module.exports = className
我知道可以使用normalFunction
来调用instance
,而可以不用instance
来调用静态函数。
但是我需要知道上面两个函数声明之间的区别是什么?
谢谢!
答案 0 :(得分:2)
静态功能-无权使用任何对象实例。这意味着该函数可以在没有实例的情况下访问,并且它也不能访问任何实例数据。基本上,它有助于公开使用哪种util的功能。
正如MDN所描述的,“静态方法被调用而无需实例化 它们的类,并且在实例化该类时也不能调用它们。 静态方法通常用于为 换句话说,静态方法无法访问数据 存储在特定对象中。
示例:Math.Sqrt(val) -
是util函数。
静态函数必须是纯函数,不能修改对象数据并提供实用程序。
这就是它的工作原理
class className {
instanceCounter = 0;
staticCounter = 0;
constructor() {
}
static myStaticFunction() {
this.staticCounter++;
console.log("myStaticFunction"+ staticCounter);
}
normalFunction() {
this.instanceCounter++;
console.log("normalFunction" + instanceCounter);
}
}
现在是否可以拨打电话
//for static
className.myStaticFunction();//print 1
className.myStaticFunction();//print 2
//for instace
new className().normalFunction();//print 1
new className().normalFunction();//print 1
答案 1 :(得分:1)
从类本身调用函数时,它称为static
函数,其中,在类实例上调用普通函数
例如
class className {
constructor() {}
static myStaticFunction() {
console.log("myStaticFunction")
}
normalFunction() {
myStaticFunction() // here myStaticFunction is called from same class
console.log("normalFunction")
}
}
module.exports = className
在其他js文件中
import * as class1 from './class';
class className2 {
constructor() {}
someFunction() {
class1 .normalFunction(); //calling class function
console.log("normalFunction")
}
}
module.exports = className2