gpt4 book ai didi

javascript - Javascript 中的无序函数参数

转载 作者:行者123 更新时间:2023-12-01 00:43:35 24 4
gpt4 key购买 nike

下面是一个带有命名参数的常规函数​​:

function who(name, age, isMale, weight)
{
alert(name + ' (' + (isMale ? 'male' : 'female') + '), ' + age + ' years old, ' + weight + ' kg.');
}

who('Jack', 30, true, 90); //this is OK.

我想要达到的目标是;您是否按顺序传递参数;该函数应该产生类似的结果(如果不相同):

who('Jack', 30, true, 90); //should produce the same result with the regular function
who(30, 90, true, 'Jack'); //should produce the same result
who(true, 30, 'Jack', 90); //should produce the same result

这使您能够以任何顺序传递参数列表,但仍会映射到逻辑顺序。到目前为止我的方法是这样的:

function who()
{
var name = getStringInArgs(arguments, 0); //gets first string in arguments
var isMale = getBooleanInArgs(arguments, 0); //gets first boolean in arguments
var age = getNumberInArgs(arguments, 0); //gets first number in arguments
var weight = getNumberInArgs(arguments, 1); //gets second number in arguments

alert(name + ' (' + (isMale ? 'male' : 'female') + '), ' + age + ' years old, ' + weight + ' kg.');
}

这里有一个小问题; getStringInArgs()getNumberInArgs() 等函数每次都会遍历所有参数,以在指定位置按类型查找 arg。我只能迭代 args 一次并保留位置标志,但随后我必须在 who() 函数内执行此操作。

您认为这种方法合乎逻辑并且是唯一的方法吗?有更好的方法吗?

编辑1:上面的代码确实有效。我只是想知道是否有更好的方法。

编辑 2:您可能想知道这是否有必要或者是否有意义。主要原因是:我正在编写一个 jQuery 函数,它将特定的样式添加到 DOM 元素。我希望这个函数将其参数视为速记 CSS 值。

示例:

border: 1px solid red;
border: solid 1px red; /*will produce the same*/

所以;这是到目前为止真正的最终代码:

(function($){
function getArgument(args, type, occurrence, defaultValue)
{
if (args.length == 0) return defaultValue;

var count = 0;
for(var i = 0; i < args.length; i++)
{
if (typeof args[i] === type)
{
if (count == occurrence) { return args[i]; }
else { count++; }
}
}
return defaultValue;
}

$.fn.shadow = function()
{
var blur = getArgument(arguments, 'number', 0, 3);
var hLength = getArgument(arguments, 'number', 1, 0);
var vLength = getArgument(arguments, 'number', 2, 0);
var color = getArgument(arguments, 'string', 0, '#000');
var inset = getArgument(arguments, 'boolean', 0, false);
var strInset = inset ? 'inset ' : '';

var sValue = strInset + hLength + 'px ' + vLength + 'px ' + blur + 'px ' + color;
var style = {
'-moz-box-shadow': sValue,
'-webkit-box-shadow': sValue,
'box-shadow': sValue
};

return this.each(function()
{
$(this).css(style);
});
}
})(jQuery);

用法:

$('.dropShadow').shadow(true, 3, 3, 5, '#FF0000');
$('.dropShadow').shadow(3, 3, 5, '#FF0000', true);
$('.dropShadow').shadow();

最佳答案

我发现使用对象在未来会更直接并且更不容易出错:

var person = {
name: 'Jack',
age: 30,
isMale: true,
weight: 90
};

who(person);

function who(person){
alert(person.name +
' (' + (person.isMale ? 'male' : 'female') + '), ' +
person.age + ' years old, ' +
person.weight + ' kg.');
}

这样,当您多年后回来时,您就不必查找年龄是第一个、第二个还是第五个数字,并且更能描述您想要实现的目标。

关于javascript - Javascript 中的无序函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com