Чтобы достичь того, что вам нужно, вам нужно будет либо передать --
или null
для аргумента middlename
:
componentWillMount() {
var firstname = 'Naisarg';
var surname = 'Parmar';
this.infoPrint(firstname, null, surname);
this.infoPrint(firstname, '--', surname);
}
или, альтернативно, вы можете реорганизовать сигнатуру вашего метода, передав эти аргументы косвенно через аргумент объекта:
function infoPrint(name = { first: '--', middle: '--', last: '--' }) {
console.log('Firstname: ', name.first, ', Middle name: ', name.middle, ', Surname: ', name.last);
}
infoPrint({
first: 'Naisarg',
last: 'Parmar'
});
Метод «аргумент объекта», показанный выше, решает проблему, с которой вы сталкиваетесь, путем сохранения (ключевой) связи между самими аргументами и способом, которым каждый ключевой аргумент фактически используется в вашей функции infoPrint()
.
Без этого среда выполнения JavaScript не может знать, что вы намерены передать переменную surname
в infoPrint()
в качестве «третьего аргумента фамилии» - проще говоря, передаваемые вами аргументы назначены с первого до последнего. Замена переменной значениями, как показано ниже, может дать более полное представление о том, что происходит, и почему ваш исходный код не работает должным образом:
// var firstname = 'Naisarg';
// var surname = 'Parmar';
// Substitute variables with values to better understand how
// arguments are being passed to the function
this.infoPrint(
'Naisarg' /* <-- firstname */,
'Parmar' /* <-- middlename */,
/* no value for surname, so use default "--" */
); /* Prints: "Firstname: Naisarg , Middle name: Parmar , Surname: -- " */