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

kid*_*tal 2 javascript ecmascript-6

如果我有这个:

class Math {
  static add(a, b) {
    return a + b
  }
}
Run Code Online (Sandbox Code Playgroud)

我想把它变成:

class Math {
  static add(a, b) {
    return a + b
  }
  static subtract(a, b) {
    return a - b
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Math.subtract(1,1) // 0
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 6

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

Object.assign(Math, {
  subtract(a, b) {
    return a - b
  }
});
Run Code Online (Sandbox Code Playgroud)

  • @kidcapital - 在`Math.subtract = function(a,b){...}`中直接将属性分配给`Math`对象的其他答案(包括我的答案)中的方法即使在ES3中也能正常工作, ES4,ES5.或者你也可以在ES5 +中使用`Object.defineProperty()`.`Object.assign()`只允许你在一个函数调用中附加多个静态方法,但你可以直接分配每个方法而不使用`Object.assign()`并且具有广泛的浏览器兼容性. (2认同)