在函数参数

时间:2016-02-10 10:31:54

标签: javascript

我是javascript的新手。我有一个拍摄物体的功能。但是我如何确保调用者遵循我想要的对象结构。由于javascript中没有类的概念,我无法创建模型类并让调用者使用它?

function foo(myObject)
{

}

无论是谁打电话都应该给我

{
  Count,
  [
    {
      FirstName,
      LastName
    },
    {
      FirstName,
      LastName
    },
  ]
}

1 个答案:

答案 0 :(得分:2)

那么你可以简单地检查你收到的对象类型作为参数,然后检查这些值是否实际存在,如下所示:

function foo(myObject) {
    if (typeof myObject !== 'object') {
        // doesn't match
        return;
    }
    if (typeof myObject.Count === 'undefined') {
        // no count property
    }
}

但是,从您的问题来看,似乎您想要更多地修复哪种对象应该作为参数发送,这也可以在javascript中执行,例如:

function MyParamOptions() {
    // define properties here
    this.persons = [];
    Object.defineProperty(this, 'Count', {
        get: function() {
            return this.Names.length;
        },
        set: function() {
            // dummy readonly
        }
    });
}

然后你可以通过说

来实例化这个类的实例
var options = new MyParamOptions();
options.persons.push({ firstName: 'bla', lastName: 'bla' });

并更改foo函数内的检查,如

function foo(myObject) {
    if (myObject instanceof MyParamOptions) {
        // here myObject is MyParamOptions, so you can access the persons array, the Count property etc...
    }
}

// and call foo with your MyParamOptions
foo(options);

然而,这不会在编译时抛出任何警告,因此人们可以使用任何类型的参数调用您的函数。如果您在编译时查找错误,可以查看TypeScript或类似的技术,然后将您的TypeScript代码转换为javascript)