3

MyObj(仮説的に)次のようなメソッドを持つオブジェクトコンストラクターがあるとしましょう:

MyObj.prototype.method = function(x, y){
    x = x || this.x; //default value
    y = y || this.y;
}

xデフォルトにしたい場合はどうすればよいthis.xですか? これは私が思いついたものです:

var object = new MyObj();
var omit = 0; //I don't think the first two
    omit = ''; // values would even default?
    omit = null;
    omit = undefined;
object.method(omit, 5);

問題は、関数からパラメーターを省略するためのベスト プラクティスまたは受け入れられている方法はあるかということです。

4

3 に答える 3

5

ほとんどの場合、そのようなプレースホルダーを定義する必要があると感じた場合、本当に必要なのは options オブジェクトを使用することです:

object.method({y: 5});

x = x || this.x;usingは偽の値を許可しないことに注意してください。だから普段はそうしてる

function method(opt) {
   var x = (opt && 'x' in opt) ? opt.x : defaultValue;
   ...
} 

本当に値を渡す必要がある場合は、それが最も明白な解決策undefinedだと思います。undefinedそして最も明白なことは、ほとんどの場合、保守が最も簡単であることを意味します。

于 2013-05-15T13:34:04.943 に答える
2
MyObj.prototype.method = function(x, y){
    x = typeof x == 'undefined' ? this.x : x; //default value
    y = typeof y == 'undefined' ? this.y : y;
}

var object = new MyObj();
object.method(undefined, 5);// pass undefined
于 2013-05-15T13:33:01.070 に答える
0

usingnullがクロスランゲージに最も適していることがわかります。これは単なる好みの問題nullですが、コード内の別の場所で何か他のものを定義できるため、リテラル値を記述することを好みます。(undefinedある値に設定することもできます。)

MyObj.prototype.method = function(x, y){
    x = x || this.x; //default value
    y = y || this.y;
}

var object = new MyObj();
object.method(null, 5);
于 2013-05-15T13:37:35.587 に答える