如何在JavaScript中动态创建静态方法?

时间:2016-01-27 22:12:29

标签: javascript ecmascript-6

如果我有这个:

class Math {
  static add(a, b) {
    return a + b
  }
}

我希望把它变成:

class Math {
  static add(a, b) {
    return a + b
  }
  static subtract(a, b) {
    return a - b
  }
}

有没有办法动态地做到这一点?例如

class Math {
  static add(a, b) {
    return a+b
  }
}

Math.extend({
  subtract: function(a, b) {
     return a-b
  }
})

Math.subtract(1,1) // 0

5 个答案:

答案 0 :(得分:5)

静态方法只不过是构造函数的方法。所以你需要做的就是将方法分配给Math

Object.assign(Math, {
  subtract(a, b) {
    return a - b
  }
});

答案 1 :(得分:1)

将其编译为ES5时,基本上可以得到这个:

function Math() {
}
Math.add = function(a, b) { return a + b; }

因此,您可以添加如下动态静态方法:

Math.subtract = function(a, b) {
  return a - b;
}

或者,既然你正在使用ES6,你可以使用箭头功能:

Math.subtract = (a, b) => a - b;

答案 2 :(得分:1)

静态方法只是构造函数的方法,所以你可以随时定义一个:

Math.subtract = function(a, b) {
    return a - b;
}

注意:这可以在当前使用的任何浏览器中使用,因为它不依赖于任何新功能或近期功能。

答案 3 :(得分:0)

最简单的方法是将属性分配给类:

class Test {}

Test.method = function() {
    alert("works");
};

Test.method(); // works

https://jsfiddle.net/byppz1vt/1/

答案 4 :(得分:-1)

您可以通过Math.subtract = function() { // code here };添加静态方法。