我想知道是否可以通过例如指定其名称来将值传递给特定参数,而不考虑此参数是第一个,第二个还是第100个。
例如,在Python中,您可以轻松地执行以下操作:
def myFunction(x, y):
pass
myFunction(y=3);
我真的需要将一个值传递给一个特定的参数,我不知道它在参数枚举中的位置。我已经搜索了一段时间,但似乎没有任何效果。
答案 0 :(得分:5)
不,javascript中不存在命名参数。
有一种(某种)解决方法,通常复杂的方法可能会取一个对象来代替单个参数
function doSomething(obj){
console.log(obj.x);
console.log(obj.y);
}
可以使用调用
doSomething({y:123})
首先记录undefined
(x
)后跟123
(y
)。
您可以允许某些参数也是可选的,如果未提供,则提供默认值:
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