可选参数的名称(Javascript)的值

时间:2017-02-13 05:32:37

标签: javascript

我有像这样的javascript函数

function drawImageOnCanvas(canvas, texturePath, color, type, onCall, modelPath, scene, pX, pY, pZ, scale, transform) {}

此处onCall, modelPath, scene, pX, pY, pZ, scale, transform是可选参数。我如何仅为scale传递值。有没有办法定义参数名称和传递值?

3 个答案:

答案 0 :(得分:3)

您可以使用对象作为函数的参数。

function drawImageOnCanvas(canvas, options){
    var scale = options.scale;
}

在通话网站:

drawImageOnCanvas(canvas, {scale: 2});

另外,为了处理可选参数,您可以使用if||?:检查其存在。

var color = /*default color*/;
if (options.color){
    color = options.color;
}

或者

var color = options.color || /*default color*/;

或者

var color = options.color ? options.color : /*default color*/;

注意:如果options包含false0等值的参数,则上述方法不再适用。例如,假设我们有一个名为isActive的参数,那么传递{isActive: false}将导致/*default isActive*/。要解决此问题,您可以使用.hasOwnPropertyin

var options = {scale: 2, isActive: false};

console.log('isActive' in options); // true
console.log(options.hasOwnProperty('isActive')); // true
console.log(options.isActive); // false

答案 1 :(得分:1)

只要你有一个带有许多可选参数的函数,一个更好的选择是将所有可选参数的单个参数用作对象。

在ES6中,使用destructuringdefault parameters可以更轻松地完成此案例。

function drawImageOnCanvas(canvas, {scale = 1} = {}) {
    ...
}

然后你可以这样调用这个函数:

drawImageOnCanvas(canvas, { scale: 2 });



function test({ x = 10 } = {}) {
  console.log(x);
}

test({ x: 100 }); // passing x
test({ y: 200 }); // not passing x
test();           // not passing anything still works




答案 2 :(得分:0)

创建一个数组.length等于要运行的预期参数数,设置传递给函数的参数作为数组的元素,将数组的索引10设置为{{1}的值使用rest元素将参数数组传递给函数,在函数内解析赋值以定义命名变量

scale