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

大多数情况下,当您觉得需要定义这样的占位符时,您真正需要的是使用选项对象:

object.method({y: 5});

请注意, usingx = x || this.x;不允许虚假值。这就是为什么我通常这样做

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 回答