如何在不调用javascript函数的情况下查询其参数

4
给定一个类似以下命令队列的东西...
var commandQueue = [
        function() {thing(100, 0, shiftFunc)},
        function() {thing(100, 233, shiftFunc)},
        function() {thing(100, 422, shiftFunc)}
];

我该如何编写一个函数,以commandQueue作为参数,并返回队列中函数的第二个参数(索引[1])的总和,而不调用队列中的函数?
5个回答

6
您可以使用Function#toString和正则表达式,查找第一个逗号和第二个逗号之间的值。

var commandQueue = [
        function() {thing(100, 0, shiftFunc)},
        function() {thing(100, 233, shiftFunc)},
        function() {thing(100, 422, shiftFunc)}
];

console.log(commandQueue.reduce(function (r, a) {
     return r + +((a.toString().match(/,\s*(\d+),/) || [])[1] || 0);
}, 0));


1
很遗憾,这是不可能的。JavaScript 无法查看函数定义的内部。

1

你可以稍微改写一下,然后使用 map

function thing(a, b) {
  return Math.pow(a * b, 2);
}
var commandQueue = [
  function() {
    return thing(100, 0);
  },
  function() {
    return thing(100, 233) % 6;
  },
  function() {
    return thing(100, 422) % 6;
  }
];
var commandResults = commandQueue.map(function(a) {
  return a();
});
console.log(commandResults);


1

var commandQueue = [
    function() {thing(100, 0, shiftFunc)},
    function() {thing(100, 233, shiftFunc)},
    function() {thing(100, 422, shiftFunc)}
];


function getThingSecondArg(fn) {
    return +/thing\([^,]*,([^,]*)/.exec(fn)[1].trim();
};

function sum(arr) {
    for (var i=0, result=0; i<arr.length; i++) {
        result += arr[i];
    }
    return result;
}

console.log(sum(commandQueue.map(getThingSecondArg)));


0
你可以这样做:

const sum = commandQueue.reduce((acc, val) =>
  Number(val.toString().split(',')[1]) + acc, 0);
console.log(sum);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接