如果没有选项对象传递到我的构造函数中,我想设置默认值'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中设置默认参数值的惯用方法吗?
答案 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';
}