0

すべての関数に単一のオブジェクトパラメータを使用させて、順序に関係なく名前付き引数のリストを渡すことができるようにします。

例えば:

function A(param){

    this.first = param.first ? param.first : null;
    this.second = param.second ? param.second : null;

}

したがって、何かを渡すことでAオブジェクトを作成できます。オブジェクトに最初または2番目のプロパティがない場合でも、オブジェクトはすべてのプロパティがnullまたはその他のデフォルト値に設定された状態で作成されます。

デフォルトのAオブジェクトを作成したい場合は、パラメーターオブジェクトをまったく使用せずにnew A()を呼び出したいのですが、「undefined」のプロパティに不正にアクセスしようとしているため、コンストラクターが「何でも作る。

私はそれをこのようにすることができます:

function A(param){

    if(typeof param ==== 'undefined')param = {};
    this.first = param.first ? param.first : null;
    this.second = param.second ? param.second : null; 

}

ただし、すべての関数に単一のparamオブジェクトを使用させる場合は、すべての関数定義にこの行を含める必要があります。

この結果を達成するためのより良い方法はありますか、またはすべての関数が自動的にこのチェックを取得して、パラメーターが存在するか、少なくとも初期化されていることを確認して、アクセスしようとしたときにコードがフォールオーバーしないように、関数プロトタイプを操作する方法はありますか? 'undefined'のプロパティ。

ありがとう。

4

2 に答える 2

1

||次の演算子を使用できます。

function A(param){
  param == param || {};
  this.first = param.first || null;
  this.second = param.second || null; 
}
于 2012-06-03T07:47:36.297 に答える
1

次のようにラッパー関数を作成するだけです。

function wrap(funct) {
    return function (args) {
        if (typeof args == "undefined") args = {};
        funct.apply(this, args);
    };
}

次のように、好きなだけコンストラクターを作成できます。

var A = wrap(function (args) {
    this.first = args.first || null;
    this.second = args.second || null;
});

var B = wrap(function (args) {
    this.first = args.first || null;
    this.second = args.second || null;
});

次に、コンストラクターを初期化します。

var a = new A;
var b = new B({
    first: 2
});

alert(a.first);  // null
alert(a.second); // null
alert(b.first);  // 2
alert(b.second); // null

乾杯。=)

于 2012-06-03T07:52:47.833 に答える