3

Here is my object construction,

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

Now, I have created an instance for this, like

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

Its working fine when i print the output.

But, if i create the object like

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

or

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

its not working fine. In both the cases, the DateOfBirth field is invalid.

I need to define an object with optional parameters.

4

3 回答 3

6

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

当你这样做var emp = new Employee(name = "sample");

您正在声明一个name全局变量,分配sample给它并将其传递调用new

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

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

Employee 函数变为:

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");}

因此,除非 Employee 成长为一个真正的模型(并且不仅仅是两个领域),否则我认为您可能需要考虑这一点。

于 2013-05-28T10:53:57.377 回答
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 || "");
}
于 2013-05-28T11:00:47.580 回答
-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");
于 2013-05-28T10:57:53.543 回答