我现在正在学习Javascript并且来自Java的背景。在Java中,我们重载了构造函数,其中在编译时,编译器将决定调用哪个版本的构造函数。
在Javascript的情况下,我们只能有一个构造函数。在这种情况下,如果构造函数有3个参数,那么如何只传递第三个参数。
前:
class Addition {
constructor(a,b,c){
console.log(a+B+c);
}
}
Addition obj = new Addition(null, 40, null);
//or
Addition onj2 = new Addition(undefined, undefined, 45);
在Javascript中有更好的方法吗?
答案 0 :(得分:3)
您可以使用EcmaScript的参数解构和默认值来实现这一点。此外,您需要使用const
(或let
或var
)关键字来创建变量。
class Addition {
constructor({a = 0, b = 0, c = 0}) {
console.log(a + b + c);
}
}
const obj = new Addition({a: null, b: 40, c: null});
const onj2 = new Addition({c: 45});
答案 1 :(得分:1)
我希望这能解决你的问题:D
class Addition {
constructor(a=null,b=null,c=null){
console.log(a+b+c);
}
}
var obj = new Addition(null, 40, null);
var onj2 = new Addition(undefined, undefined, 45);
答案 2 :(得分:0)
JS中不可能出现重载,但您可以使用Object destructuring。它们甚至可能很复杂并且引用其他默认参数,例如:
function rangeMessage({from=1, to=from+1, message=(counter) => `Hello ${counter}`}={}) {
for(from; from <= to; from++) {
console.log(message(from));
}
}
rangeMessage({from: 10, to: 20});
rangeMessage({to: 10, message:(counter) => `Bye ${counter}`})
rangeMessage()
function sumABC({a=null, b=null, c=null}={}) {
let result = 0;
if(a) result += a;
if(b) result += b;
if(c) result += c;
return result;
}
console.log(sumABC());
console.log(sumABC({a:10}));
console.log(sumABC({b:5}));
console.log(sumABC({b: 10, c: 5}));
&#13;
{} = {}
部分与其他解构赋值相同 - 如果没有传入任何对象,则假设一个空对象(然后由左侧的对象解构语句填充)。