Использование именованных параметров в 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 })
порядок не имеет значения.