我有像这样的javascript函数
function drawImageOnCanvas(canvas, texturePath, color, type, onCall, modelPath, scene, pX, pY, pZ, scale, transform) {}
此处onCall, modelPath, scene, pX, pY, pZ, scale, transform
是可选参数。我如何仅为scale
传递值。有没有办法定义参数名称和传递值?
答案 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
包含false
,0
等值的参数,则上述方法不再适用。例如,假设我们有一个名为isActive
的参数,那么传递{isActive: false}
将导致/*default isActive*/
。要解决此问题,您可以使用.hasOwnProperty
或in
。
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中,使用destructuring和default 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