这是我的对象构造,
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
字段都无效。
我需要用可选参数定义一个对象。
答案 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");