1

说我有这样的功能

function myFunc(a, b, c)
{
    if(a!=undefined) this.a = a;
    if(b!=undefined) this.b = b;
    if(c!=undefined) this.c = c;
}

我只想设置 b 的值,然后我可以做这样的事情。

myFunc(undefined, "some Value for b", undefined);

但我想知道是否有一种方法可以让我做这样的事情来设置 b 的值

myFunc(b:"some value for b");

这可能是错误的,但您可能明白我的意思。我想指定属性的名称和值,这样我就不必担心传递未定义的值。我该怎么做?

也可以随意更改标题,我不知道这个问题应该叫什么。

4

3 回答 3

4

jsFiddle 演示

当然,只需使用这个:

function myFunc(options)
{
 if(typeof(options['a']) != "undefined") this.a = options['a'];
 if(typeof(options['b']) != "undefined") this.b = options['b'];
 if(typeof(options['c']) != "undefined") this.c = options['c'];
}

然后用

var func = new myFunc({b:"some value for b"});
console.log(func.b);//"some value for b"
于 2013-03-19T19:07:23.867 回答
1

是的,传入一个对象字面量

function myFunc(options)
{
    if(options.a!=undefined) this.a = options.a;
    if(options.b!=undefined) this.b = options.b;
    if(options.c!=undefined) this.c = options.c;
}

像这样打电话

var var1 = new myFunc({b:"some value for b"});

或更动态、可扩展的方式(如前所述)

function myFunc(obj)
{
    for (var i in obj)
    {
        if(obj.hasOwnProperty(i))
        {
            this[i]=obj[i];
        }
    }
}

var func = new myFunc({b:"some value for b"});
console.log(func.b);//"some value for b"
于 2013-03-19T19:08:59.997 回答
1

您可以通过将 Ojbect 作为参数传递来实现此目的:

var someObject = { a: 'some A value', b: 'some B value' };

myFunc(someObject);

这是一种非常普遍的做法。

例如,jQuery 经常使用这种结构。

如果您查看jQuery.animate()的文档,您会发现它接受一个普通对象作为第一个参数。

于 2013-03-19T19:10:15.130 回答