如何在Javascript中定义可选参数

时间:2013-05-28 10:50:00

标签: javascript optional-parameters

这是我的对象构造,

function Employee(name, dob) {
       this.Name = name;
       this.DateOfBirth = new Date(dob);
   }

现在,我已经为此创建了一个实例,例如

var emp = new Employee("sample","12/12/12");

打印输出时工作正常。

但是,如果我创建像

这样的对象
var emp = new Employee(name = "sample");

var emp = new Employee(dob = "12/12/12");

它不能正常工作。在这两种情况下,DateOfBirth字段都无效。

我需要用可选参数定义一个对象。

3 个答案:

答案 0 :(得分:6)

JavaScript不支持命名的可选参数。

执行var emp = new Employee(name = "sample");

您宣布name个全局变量,为其分配sample并将 传递给new来电。

您可以使用对象在JS中完成类似的语法:

var emp = new Employee({name:"sample"}); 

员工职能变为:

function Employee(options) {
       this.Name = options.name;
       if(options.dob !== undefined){
           this.DateOfBirth = new Date(options.dob);
       }
}

值得一提的是,在实践中,您通常不需要Employee类,而且可以简单地执行:

var emp = {name:"sample"};

或者:

var emp = {dob:new Date("12/12/12");}

因此,除非员工成长为真正的模型(并且不仅仅包含两个字段),否则我认为您可能需要考虑这一点。

答案 1 :(得分:1)

function Employee(params) {
    if (typeof params != "undefined") {
        this.Name = (typeof params.name != "undefined") ? params.name : "";
        this.DateOfBirth = (typeof params.dob != "undefined") ? new Date(params.dob) : null;
    }
}

new Employee({
    name: "John",
    dob: "12/12/12"
});
new Employee({
    name: "John"
});
new Employee({
    dob: "12/12/12"
});

或使用||的简单陈述。

function Employee(params) {
    params = params || {};
    this.Name = params.name || "";
    this.DateOfBirth = new Date(params.dob || "");
}

答案 2 :(得分:-1)

作为一种好的做法,你永远不应该遗漏变量。 您可以明确调用var emp = new Employee(null, "12/12/12");

这样一切都被初始化了,你以后就不会有头疼了。 还有这样的东西,但你真的需要在分配之前检查它们。

function Employee() {
       this.Name = name;
       this.DateOfBirth = new Date(dob);
   }

var emp = new Employee(name = null,dob = "12/12/12");