使用参数添加函数到数组Javascript(Node.js)

时间:2016-05-30 07:58:04

标签: javascript arrays node.js

我想用params将函数推送到数组而不执行它们。这是我到目前为止所尝试的:

 var load_helpers = require('../helpers/agentHelper/loadFunctions.js');
 var load_functions = [];
 load_functions.push(load_helpers.loadAgentListings(callback , agent_ids));
 load_functions.push(load_helpers.loadAgentCount(callback , agent_data));

但是通过这种方式,函数会在推送时执行。 This Question提供了类似的例子,但没有参数。如何在此示例中包含参数?

3 个答案:

答案 0 :(得分:3)

您必须绑定参数到函数。 第一个参数是' thisArg'。

function MyFunction(param1, param2){
   console.log('Param1:', param1, 'Param2:', param2)
}

var load_functions = [];
load_functions.push(MyFunction.bind(undefined, 1, 2));
load_functions[0](); // Param1: 1 Param2: 2

答案 1 :(得分:1)

推送符合您需要的功能:

load_functions.push(
  () => load_helpers.loadAgentListings(callback, agent_ids),      
  () => load_helpers.loadAgentCount   (callback, agent_data)
);

答案 2 :(得分:1)

你可以用这样的函数包装添加的元素,让我们模拟load_helpers

var load_helpers = {
  loadAgentListings: function(fn, args) {
    args.forEach(fn)
  }
}

尝试以这种方式使用它:

var a = []

a.push(function() {
  return load_helpers.loadAgentListings(function(r) {
    console.log(r)
  }, ['a', 'b', 'c'])
})

a[0]() // just execution

所有取决于您想要传递其他参数的级别,第二个概念验证

var a = []

a.push(function(args) {
  return load_helpers.loadAgentListings(function(r) {
    console.log(r)
  }, args)
})

a[0](['a', 'b', 'c']) // execution with arguments

使用绑定:

var a = []

a.push(load_helpers.loadAgentListings.bind(null, (function(r) {return r * 2})))

console.log(a[0]([1, 2, 3])) // execution with additional parameters