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



如果我有这个:

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

静态方法只不过是构造函数上的方法。因此,您需要做的就是将方法分配给Math

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

静态方法只是构造函数上的方法,因此您可以随时定义一个方法,如下所示:

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

注意:这将适用于当前使用的任何浏览器,因为它不依赖于任何新功能或最新功能。

当将其编译为 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;

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

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

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

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

最新更新