带有可选参数的javascript构造函数

时间:2018-06-06 07:53:38

标签: javascript ecmascript-6

我现在正在学习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中有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

您可以使用EcmaScript的参数解构和默认值来实现这一点。此外,您需要使用const(或letvar)关键字来创建变量。

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;
&#13;
&#13;

{} = {}部分与其他解构赋值相同 - 如果没有传入任何对象,则假设一个空对象(然后由左侧的对象解构语句填充)。