在奇怪的情况下,在 JavaScript 中将数组作为参数传递失败
Passing array as argument fails in JavaScript in an odd situation
我希望能够从另一个方法调用中获取一个数组,并在将它传递给另一个函数时添加一个额外的参数。阅读 this answer 后,我制作了以下 CoffeeScript:
class TestMe
some_meth: (four) ->
(console.log e) for e in four
foo= [37.5,5,255.0]
t= new TestMe()
t.some_meth(foo...,1)
编译成如下JavaScript(coffee版本1.9.1):
(function() {
var TestMe, foo, t,
slice = [].slice;
TestMe = (function() {
function TestMe() {}
TestMe.prototype.some_meth = function(four) {
var e, i, len, results;
results = [];
for (i = 0, len = four.length; i < len; i++) {
e = four[i];
results.push(console.log(e));
}
return results;
};
return TestMe;
})();
foo = [37.5, 5, 255.0];
t = new TestMe();
t.some_meth.apply(t, slice.call(foo).concat([1]));
}).call(this);
这不会产生任何输出。
通过调试器 (node debug
),我发现函数的参数只是数组的第一个元素(而不是数组)。这很奇怪,因为如果我在调试器中执行 slice.call(foo).concat([1])
,我会得到一个数组作为输出。如果我将 some_meth
的签名更改为接受四个参数,则输出符合预期。
显然,有几种解决方法可供我使用,我将使用其中一种,但我当然更喜欢能够编写 t.some_meth(foo...,1)
.
的清晰和简单
有没有人知道为什么这个成语无法按预期工作?实现能够传递一个包含四个元素的数组的目标的惯用方法是什么,其中一个元素是常量,其余元素来自另一个数组?
您的错误在 t.some_meth(foo...,1)
中。您正在将数字数组 [37.5, 5, 255.0, 1]
的内容作为参数传递给 t.some_meth
。因此 ìn
失败,因为四不是数组而是数字 37.5
.
正确的调用是:
t.some_meth [foo..., 1]
从而传入数组
我希望能够从另一个方法调用中获取一个数组,并在将它传递给另一个函数时添加一个额外的参数。阅读 this answer 后,我制作了以下 CoffeeScript:
class TestMe
some_meth: (four) ->
(console.log e) for e in four
foo= [37.5,5,255.0]
t= new TestMe()
t.some_meth(foo...,1)
编译成如下JavaScript(coffee版本1.9.1):
(function() {
var TestMe, foo, t,
slice = [].slice;
TestMe = (function() {
function TestMe() {}
TestMe.prototype.some_meth = function(four) {
var e, i, len, results;
results = [];
for (i = 0, len = four.length; i < len; i++) {
e = four[i];
results.push(console.log(e));
}
return results;
};
return TestMe;
})();
foo = [37.5, 5, 255.0];
t = new TestMe();
t.some_meth.apply(t, slice.call(foo).concat([1]));
}).call(this);
这不会产生任何输出。
通过调试器 (node debug
),我发现函数的参数只是数组的第一个元素(而不是数组)。这很奇怪,因为如果我在调试器中执行 slice.call(foo).concat([1])
,我会得到一个数组作为输出。如果我将 some_meth
的签名更改为接受四个参数,则输出符合预期。
显然,有几种解决方法可供我使用,我将使用其中一种,但我当然更喜欢能够编写 t.some_meth(foo...,1)
.
有没有人知道为什么这个成语无法按预期工作?实现能够传递一个包含四个元素的数组的目标的惯用方法是什么,其中一个元素是常量,其余元素来自另一个数组?
您的错误在 t.some_meth(foo...,1)
中。您正在将数字数组 [37.5, 5, 255.0, 1]
的内容作为参数传递给 t.some_meth
。因此 ìn
失败,因为四不是数组而是数字 37.5
.
正确的调用是:
t.some_meth [foo..., 1]
从而传入数组