0

オプションオブジェクトがコンストラクターに渡されない場合は、デフォルトの「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でデフォルトのパラメーター値を設定する慣用的な方法ではありませんか?

4

2 に答える 2

9

オプションと名前が存在するかどうかを確認するためにコードを過度に複雑にする代わりに、オブジェクトが定義されているかどうかを確認し、定義されていない場合は、空のオブジェクトに設定します。

var Plan = function(options){
  options = options || {};
  this.name = options.name || 'small';
}
于 2013-01-09T14:09:04.223 に答える
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存在するかどうかoptionsnameプロパティがあるかどうかを確認する必要があります。

これは何をしますか:

if(options){
    if(options.name){
        this.name = options.name;
    } else {
        this.name = 'small';
    }
} else {
    this.name = 'small';
}
于 2013-01-09T14:07:39.927 に答える