如果我有这个:
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 };
添加静态方法。