如果我有这个:
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
答案 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
答案 4 :(得分:-1)
您可以通过Math.subtract = function() { // code here };
添加静态方法。