如何在类似C#的Javascript中传递手动参数顺序

本文关键字:顺序 参数 Javascript | 更新日期: 2023-09-27 18:25:22

一般来说,在C#中,我有一个这样的方法;

public virtual IPagedList<Manufacturer> GetAllManufacturers(string manufacturerName = "",
            int pageIndex = 0,
            int pageSize = int.MaxValue, 
            bool showHidden = false)
{
     //rest of the code
}

当我需要手动指定参数顺序/覆盖/调用时,我会这样做;

//manually saying, pageIndex should be as parameter 1 and showHidden should be true and order no 2
GetAllManufacturers(pageIndex:10, showHidden:true);

类似地,在JavaScript中,我有以下函数;

var CommonManager = function () {
    var
        displayWizard = function (wizardName, formName, leaveStepCallBack) {
            leaveAStepCallback('test');
            function leaveAStepCallback(obj) {
                if (typeof (leaveStepCallBack) == "function") {
                    //yaheeeeeee callback is there
                    return leaveStepCallBack();
                }
                //oh no callback, handle the defaults
                return validateSteps(); // return false to stay on step and true to continue navigation
            }
        };
    return {
        displayWizard: displayWizard
    };
}();

如果我想处理回调,我会这样调用它;

CommonManager.displayWizard($('#wizard'), $('#attributeForm'), function() {
    //i handled it, don't need to call default function
});

如果我不想处理回调,我喜欢这样;

CommonManager.displayWizard($('#wizard'), $('#attributeForm'), undefined);

请注意,我有几个可选参数,但我在这里跳过了它。在我最初的情况下,我通过了undefinedundefinedundefined
所以我的问题是
1)-如何将其调整为我可以这样称呼它;

//Notice the order of the parameter
CommonManager.displayWizard(attributeForm : $('#attributeForm'), wizard: $('#wizard')); 

2)-如果1不可能,那么我如何跳过传递这个undefined作为调用原始回调,并像这个一样调用它

CommonManager.displayWizard($('#wizard'), $('#attributeForm'));

我可以直接使用上面的代码,但我有最后一个参数,也需要像这样传递;

   CommonManager.displayWizard(wizard, attributeForm, undefined,undefined, true);

3)-最后我想知道,我是否遵循了正确的方式来执行或处理这些可选参数

如果这个问题没有意义,请告诉我。

如何在类似C#的Javascript中传递手动参数顺序

如何调整

你可以让你的函数接受一个参数对象,比如:

CommonManager.displayWizard({ attributeForm : $('#attributeForm'), wizard: $('#wizard') });

你可以把这两种方法结合起来。例如,在jQuery中,这些行是等价的:

$(this).css("color", "red");
$(this).css({ color: "red" });

这是因为css函数检查其第一个参数是否为对象并相应地执行操作。

如果1不可能,那么我如何跳过

您已经可以使用以下内容:

CommonManager.displayWizard($('#wizard'), $('#attributeForm') /* no undefined here */);

如果跳过参数列表末尾的参数,则传递给函数的默认值将为undefined

最后,我想知道,如果我遵循正确的方式做或处理这个可选参数

如果我知道我将来可能想扩展函数的参数,并且其中一些参数是/将是可选的,我通常会创建函数,使其接受单个参数:一个包含我需要传递给函数的所有值的对象。

通过这种方式,我可以添加带有默认值的参数,并且仍然可以调用跳过某些值而不破坏任何内容。