为什么设置参数的默认值不能在我的javascript中运行?

时间:2013-01-09 14:05:37

标签: javascript parameters constructor

如果没有选项对象传递到我的构造函数中,我想设置默认值'small':

var Plan = function(options){
  this.name = options.name || 'small';
}

但是当我这样做时:

var smallPlan = new Plan();

console.log(smallPlan.name);

我得到Uncaught TypeError: Cannot read property 'name' of undefined

我做错了什么?这不是在javascript中设置默认参数值的惯用方法吗?

2 个答案:

答案 0 :(得分:9)

不要过度复杂化代码以检查选项和名称是否存在,而是检查对象是否已定义,如果没有,则将其设置为空对象。

var Plan = function(options){
  options = options || {};
  this.name = options.name || 'small';
}

答案 1 :(得分:4)

options未定义。如果options.name不存在,则无法访问options

如果您想检查的不仅仅是一个属性,我建议这样:

var Plan = function(options){
    // Set defaults
    this.name = 'foo';
    this.title = 'bar';
    this.something = 'even more stuff';
    if(options){ // If options exists, override defaults
       this.name = options.name || this.name;
       this.title = options.title || this.title;
       this.something = options.something || this.something;
    }
}

否则,我会试试这个:

var Plan = function(options){
    this.name = options ? options.name || 'small' : `small`;
}

这有点难看,但你必须检查options是否存在,以及options是否有name属性。

这是做什么的:

if(options){
    if(options.name){
        this.name = options.name;
    } else {
        this.name = 'small';
    }
} else {
    this.name = 'small';
}