将值传递给特定参数,而不关心参数的位置

时间:2015-09-30 14:04:17

标签: javascript parameters

我想知道是否可以通过例如指定其名称来将值传递给特定参数,而不考虑此参数是第一个,第二个还是第100个。

例如,在Python中,您可以轻松地执行以下操作:

def myFunction(x, y):
    pass

myFunction(y=3);

我真的需要将一个值传递给一个特定的参数,我不知道它在参数枚举中的位置。我已经搜索了一段时间,但似乎没有任何效果。

6 个答案:

答案 0 :(得分:5)

不,javascript中不存在命名参数。

有一种(某种)解决方法,通常复杂的方法可能会取一个对象来代替单个参数

function doSomething(obj){
   console.log(obj.x);
   console.log(obj.y);
}
可以使用

调用

doSomething({y:123})

首先记录undefinedx)后跟123y)。

您可以允许某些参数也是可选的,如果未提供,则提供默认值:

function doSomething(obj){
   var localX = obj.x || "Hello World";
   var localY = obj.y || 999;
   console.log(localX);
   console.log(localY);
}

答案 1 :(得分:4)

在JavaScript中无法以这种方式传递参数。如果需要这样做,最好将对象传递给函数,并将属性设置为表示要传递的参数:

function myFunction(p) {
    console.log(p.x);
    console.log(p.y);
}

myFunction({y:3});

答案 2 :(得分:2)

function myFunction(parameters) {
  ...
  var x = parameters.myParameter;
}

myFunction({myParameter: 123});

答案 3 :(得分:2)

我不认为JavaScript中存在该功能

替代方式是

function someFun(params) {
   var x = prams.x;
   ...
}

函数调用将类似于

someFun({x: 5});

答案 4 :(得分:0)

不,但你完全可以传递一个物体来实现这一点。

var myFunction = function(data){
    console.log(data.foo); //hello;
    console.log(data.bar); //world;
}

myFunction({foo: 'hello', bar: 'world'});

修改

否则,您的参数将由ORDER接收,而不是名称。

var myFunction = function(foo, bar){
    console.log(foo); //bar;
    console.log(bar); //foo;
    //hyper confusing
}

var foo = 'foo',
    bar = 'bar';

//Passing the parametes out of order
myFunction(bar, foo);

答案 5 :(得分:0)

在Javascript中没有命名的参数。

但假设您没有调用系统或压缩函数,您仍然可以通过参数名称调用它。

以下是如何做到这一点的想法:

function myFunction(x, y) { return x + y }

function invokeByParams(func, params) {
  var text = func.toString()
  var i1 = text.indexOf('(') + 1
  var i2 = text.indexOf(')')
  var args = text.substring(i1, i2).split(',')
  args = args.map(function(x) { return x.trim() })
  args = args.map(function(x) { return params[x.trim()] })
  return func.apply(this, args)
}

invokeByParams(myFunction, { y: 1, x: 2 }) // => 6