2017-02-22 73 views
4

給定一個如下所示的命令隊列。 。如何在不調用它的情況下查詢javascript函數的參數

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

如何可以編寫一個函數,取commandQueue作爲參數並返回的第二參數的和(索引[1])至而不調用功能,在隊列中的隊列中的功能是什麼?

回答

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);

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));

0

你可以這樣說:

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

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)));

相關問題