首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript函数参数对象校验

javascript函数参数对象校验
EN

Stack Overflow用户
提问于 2012-06-03 15:35:26
回答 2查看 344关注 0票数 0

我想让我的所有函数都接受一个单独的对象参数,这样我就可以向它传递一个独立于顺序的命名参数列表。

例如:

代码语言:javascript
运行
复制
function A(param){

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

}

所以我可以通过传入任何东西来创建一个A对象,如果该对象没有第一个或第二个属性,那么该对象仍然会将其所有属性设置为null或其他默认值。

如果我想创建一个默认的A对象,我想调用new A()而不带任何参数对象,但这会抛出一个错误,因为我试图非法访问一个'undefined‘的属性,所以构造函数不会生成任何东西。

我可以这样做:

代码语言:javascript
运行
复制
function A(param){

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

}

但是,如果我想让我的所有函数都接受一个param对象,我就需要在每个函数定义中包含这一行。

有没有更好的方法来达到这个结果,或者有没有操纵函数原型的更好的方法,这样所有的函数都会自动得到这个检查,以确保参数在那里,或者至少是初始化的,这样当试图访问“未定义”的属性时,代码就不会崩溃。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-03 15:47:36

您可以使用||运算符:

代码语言:javascript
运行
复制
function A(param){
  param == param || {};
  this.first = param.first || null;
  this.second = param.second || null; 
}
票数 1
EN

Stack Overflow用户

发布于 2012-06-03 15:52:48

只需创建一个包装器函数,如下所示:

代码语言:javascript
运行
复制
function wrap(funct) {
    return function (args) {
        if (typeof args == "undefined") args = {};
        funct.apply(this, args);
    };
}

现在,您可以创建任意数量的构造函数,如下所示:

代码语言:javascript
运行
复制
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;
});

然后只需初始化构造函数:

代码语言:javascript
运行
复制
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

干杯。=)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10868658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档