Использование именованных параметров в node.js

Я использую node.js v4.3.1

Я хотел бы использовать именованные параметры в вызывающих функциях, так как они более читабельны.

В Python я могу вызывать функцию таким образом;

info(spacing=15, width=46)

Как мне сделать то же самое в node.js?

Моя функция JavaScript выглядит примерно так;

function info(spacing, width)
{
   //implementation
{

2 ответа

Решение

Стандартный способ Javascript - передать объект "options", такой как

info({spacing:15, width:46});

используется в коде с

function info(options) {
    var spacing = options.spacing || 0;
    var width = options.width || "50%";
    ...
}

как отсутствующие ключи в объектах возвращаются undefined это "ложь".

Обратите внимание, что передача значений, которые являются "ложными", могут быть проблематичными с этим типом кода... поэтому, если это необходимо, вы должны написать более сложный код, такой как

var width = options.hasOwnProperty("width") ? options.width : "50%";

или же

var width = "width" in options ? options.width : "50%";

в зависимости от того, хотите ли вы поддерживать унаследованные параметры или нет.

Обратите также внимание, что каждый "стандартный" объект в Javascript наследует constructor свойство, поэтому не называйте опцию таким образом.

Это проще с ES6. nodejs > 6.5 поддерживает эти функции.

Вы должны проверить эту ссылку:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

Точное использование, которое вы хотите использовать, реализовано. Однако я не рекомендовал бы это.

Приведенный ниже код (взятый из ссылки выше) - лучший способ, потому что вам не нужно помнить, в каком порядке вы должны записывать параметры.

function drawES6Chart({size = 'big', cords = { x: 0, y: 0 }, radius = 25} = {}) {
console.log(size, cords, radius);
 // do some chart drawing
}

Вы можете использовать эту функцию, выполнив:

const cords = { x: 5, y: 30 }
drawES6Chart({ size: 'small', cords: cords })

Таким образом, функции становятся более понятными, и это становится еще лучше, если у вас есть переменные с именами size, cords и radius. Тогда вы можете сделать это, используя сокращенную запись объекта.

// define vars here
drawES6Chart({ cords, size, radius })

порядок не имеет значения.

Другие вопросы по тегам