类内静态函数与普通函数之间的区别

时间:2019-02-13 06:16:10

标签: javascript node.js function class

我以这种方式定义了班级

class className {
  constructor() {

  }

  static myStaticFunction() {
    console.log("myStaticFunction")
  }

  normalFunction() {
    console.log("normalFunction")
  }
}

module.exports = className

我知道可以使用normalFunction来调用instance,而可以不用instance来调用静态函数。 但是我需要知道上面两个函数声明之间的区别是什么?

谢谢!

2 个答案:

答案 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