为什么javascript静态变量无法访问(使用类名)而不创建最小的一个实例?

Nat*_*ran 2 javascript

我正在创建一个如下所示的函数

function calculation(){
    this.add=function(x,y){
        return x+y; 
    }   
    calculation.sub=function(x,y){
        return x-y; //static method
    };
    function mul(x,y){
        return x*y; //static method
    }
    calculation.mul=mul;
}
Run Code Online (Sandbox Code Playgroud)

在声明这个方法之后,如果这样调用calculation.mul(2,1)我会收到类似的错误.

VM3676:1未捕获的TypeError:calculation.mul不是函数:1:13

但是,var _calc=new calculation();在创建实例后,我可以访问静态方法.

calculation.mul(2,1) if i try after this, i am getting value `2`.
Run Code Online (Sandbox Code Playgroud)

任何人,请澄清我.谢谢,提前.

Que*_*tin 5

因为将mul属性分配给calculation对象的代码:

calculation.mul=mul;
Run Code Online (Sandbox Code Playgroud)

......是里面calculation功能.因此它仅在您调用该calculation函数时运行.

如果您不希望它以这种方式工作,请将其移到外面.

function calculation() {
  this.add = function(x, y) {
    return x + y;
  }
  calculation.sub = function(x, y) {
    return x - y; //static method
  };
}

function mul(x, y) {
  return x * y; //static method
}
calculation.mul = mul;

console.log(calculation.mul(2, 1))
Run Code Online (Sandbox Code Playgroud)