JavaScript中的命名参数

JavaScript中的命名参数,javascript,function,Javascript,Function,假设我有一个这样的函数 function myFunc(a, b, c) { if(a!=undefined) this.a = a; if(b!=undefined) this.b = b; if(c!=undefined) this.c = c; } var var1 = new myFunc({b:"some value for b"}); 我只想设置b的值,然后我可以这样做 myFunc(undefined, "some Value for b", undef

假设我有一个这样的函数

function myFunc(a, b, c)
{
    if(a!=undefined) this.a = a;
    if(b!=undefined) this.b = b;
    if(c!=undefined) this.c = c;
}
var var1 = new myFunc({b:"some value for b"});
我只想设置b的值,然后我可以这样做

myFunc(undefined, "some Value for b", undefined);
但是我想知道是否有一种方法,我可以这样做来设置b的值

myFunc(b:"some value for b");
这可能是错误的,但你可能明白我的意思。我想指定属性的名称和值,这样就不必担心传递未定义的值。我该怎么做


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

当然可以,只要使用这个:

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"

当然可以,只要使用这个:

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"

是,传入一个对象文本

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;
}
像这样打电话

function myFunc(a, b, c)
{
    if(a!=undefined) this.a = a;
    if(b!=undefined) this.b = b;
    if(c!=undefined) this.c = c;
}
var var1 = new myFunc({b:"some value for b"});
或者以更动态、更可扩展的方式(如前所述)


是,传入一个对象文本

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;
}
像这样打电话

function myFunc(a, b, c)
{
    if(a!=undefined) this.a = a;
    if(b!=undefined) this.b = b;
    if(c!=undefined) this.c = c;
}
var var1 = new myFunc({b:"some value for b"});
或者以更动态、更可扩展的方式(如前所述)


您可以通过将Ojbect作为参数传递来实现这一点:

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

myFunc(someObject);
这是一种非常普遍的做法

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


如果您查看的文档,可以看到它接受a作为第一个参数。

您可以通过将Ojbect作为参数传递来实现这一点:

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

myFunc(someObject);
这是一种非常普遍的做法

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



如果您查看文档,您可以看到它接受a作为第一个参数。

这是一个解决方案:“我不知道这个问题应该叫什么”。到目前为止,我生命中最有趣的时刻……这个.a等的目的是什么?您没有实例化一个对象,因此
这个
将是全局对象。@bfavaretto是的,我正在使用这个函数创建对象,即使这里没有显示“您的意思是说我给出的示例确实有效吗?”只有在您将语法更改为使用对象文字符号(即添加
{}
围绕
b:“某些值”
。关键概念是将对象作为参数传递。可以使用对象文字符号创建对象,如下所示:
{propA:'valueA',propB:'valueB'}
这是一个解决方案:“我不知道这个问题应该被称为什么”.到目前为止,我生命中最有趣的stackoverflow时刻…这个.a等的意图是什么?你不是在实例化一个对象,所以
这个
将是全局对象。@bfavaretto是的,我使用这个函数来创建对象,尽管这里没有显示“你的意思是说我给出的示例确实有效吗?”仅当您更改语法以使用对象文字表示法时(即在
b:“some value”
周围添加
{}
。关键概念是您将对象作为参数传递。可以使用对象文字表示法创建对象,如下所示:
{propA:'valueA',propB:'valueB}
请注意,如果这样调用,它会将
b
附加到窗口对象。请注意,如果这样调用,它会将
b
附加到窗口对象。@Ojay-您是对的,选项对象需要检查字符串索引,而不是变量索引。@TravisJ我可能认为他的意思是您丢失了brackets@AnkurSharma-啊,简单的事情。修正了。@OJay我想知道为什么obj[I]工作,为什么不obj.I。看这里-。只是想了解这里发生了什么。@AnkurSharma在for-in循环中,您将传入对象的属性名分配给变量I。这个[I]之所以有效,是因为它用当前属性(即b)替换了i,所以实际分配了this.b,而this.i没有使用变量i,您实际上是在函数上创建了i的属性。请尝试,将第二个属性改为console.log(func.i),而不是console.log(func.b)@Ojay-你是对的,options对象需要检查字符串索引而不是变量。@TravisJ我可能认为他的意思是你丢失了brackets@AnkurSharma-啊,简单的事情。解决了。@OJay我想知道为什么obj[I]有效,为什么不有效。看这里。只是想了解这里发生了什么。@AnkurSharma在for-in循环中,您将传入对象的属性名分配给变量i。这个[i]之所以有效,是因为它用当前属性(即b)替换了i,所以实际分配了这个.b,而这个.i没有使用变量i,实际上是在函数上创建了i的属性。试试看,将第二个改为console.log(func.i),而不是console.log(func.b)