javascript - 为什么 javascript 静态变量在不创建最少一个实例的情况下无法访问(使用类名)?

标签 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;
}

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

VM3676:1 Uncaught TypeError: calculation.mul is not a function at :1:13

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

calculation.mul(2,1) if i try after this, i am getting value `2`.

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

最佳答案

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

calculation.mul=mul;

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))

关于javascript - 为什么 javascript 静态变量在不创建最少一个实例的情况下无法访问(使用类名)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53790651/

相关文章:

javascript - 修改嵌套的 redux 状态而不发生变异

javascript - 将字符串中的 '/' 替换为 '\/'

javascript - 发送来自 reducer 的数据之前调用 action creator 的组件

javascript - 如何避免在 Javascript 中向变量添加转义字符?

javascript - 有没有办法检查页面是否从浏览器缓存中加载?

javascript - D3.js:旋转组,保持文本方向相同?

javascript - 如何在 Javascript 和 PHP 中自动关闭新的弹出窗口?

javascript - 单页应用程序中的历史记录.pushState/后退按钮/导航

javascript - 使用数组 onclick 中的图像更改节点图像

javascript - 在另一个 javascript 文件中调用 javascript 函数而不包含 include