уничтожение объекта, являющегося аргументом функции, со свойством по умолчанию - PullRequest
3 голосов
/ 23 апреля 2019

Я хочу передать объект в качестве аргумента функции.Если свойство 'prop' этого объекта не определено, его следует инициализировать значением по умолчанию.

Как это сделать с использованием современного JS?

Я ожидаю что-то вроде этого:

const fun = function(options = { prop: 'default'}) { console.log(options.prop)}


fun({a: 'x', prop: 'hello'}) ... // log: 'hello'

fun({a: 'x'}) ... // log: 'default'

Ответы [ 4 ]

5 голосов
/ 23 апреля 2019

Если вы хотите деструктурировать в списке параметров, у вас больше не будет доступа к всему исходному объекту (здесь options) - у вас будут только деструктурированные переменные.Итак, оставьте часть options = и поставьте = после prop вместо :.Например:

const fun = function({ prop = 'default', a }) {
  console.log('prop:', prop, 'a:', a);
};

fun({
  a: 'x',
  prop: 'hello'
}) // log: 'hello'

fun({
  a: 'x'
}) // log: 'default'

Если функция также не может быть вызвана с какими-либо параметрами, вы можете по умолчанию назначить пустой объект:

const fun = function({ prop = 'default', a } = {}) {
  console.log('prop:', prop, 'a:', a);
};

fun({
  a: 'x',
  prop: 'hello'
}) // log: 'hello'

fun({
  a: 'x'
}) // log: 'default'

fun(); // log: 'default'
2 голосов
/ 23 апреля 2019

Используйте этот синтаксис вместо:

const fun = ({ prop = "default" }) => console.log(prop);
fun({ a: "x", prop: "hello" });
fun({ a: "x" });

Обратите внимание, что вы потеряете объект и получите доступ только к prop. Чтобы решить эту проблему, вы можете собрать остальные свойства и развернуть их в объект:

const fun = ({ prop = "default", ...rest }) => {
  console.log(prop);
  const otherProps = { ...rest };
  console.log(JSON.stringify(otherProps));
}
fun({ a: "x", prop: "hello" });
fun({ a: "x" });
fun({ a: "x", b: "nonexistent", c: true, prop: "Hi!" });
1 голос
/ 23 апреля 2019

Вы можете использовать остальные свойства и исключить prop из объекта, принять значение или значение по умолчанию и присвоить это значение обратно объекту.

const
    fun = function({ prop = 'default', ...options }) { 
        Object.assign(options, { prop });
        console.log(options.prop);
    };

fun({ a: 42 });
fun({ a: 42, prop: 'bar' });
0 голосов
/ 23 апреля 2019

Я думаю, вы должны справиться с этим внутри самой функции.Ниже приведен код, который будет работать для вашего конкретного сценария

var fun = function(options = { prop:'default'}) {
if(options.prop == undefined){
options.prop = 'default'
}
console.log(options.prop)
}

fun({a:'hello'})// logs: default
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...