在数组中存储函数。这是一个好习惯吗?

时间:2017-07-08 06:13:31

标签: javascript

var sing = function(name) {
    console.log(name + " is SINGING");
}

var cry = function(name) {
    console.log(name + " is CRYING");
}

var list = [sing, cry];

for(var func of list) {
    func('foo');
}

这正是我想要的代码。但我不确定这是不是一个好习惯。

2 个答案:

答案 0 :(得分:0)

var functionName = function(name, action) { 
console.log(name + " is "+ action ); 
}
functionName("Aditya", "Programing");
  

Aditya,我认为你应该选择这种格式。保持单个功能以执行类似的任务总是好的做法。

答案 1 :(得分:0)

是的,在某些情况下,将函数存储在数组中是更好的设计。

想象一下以下EventEmitter课程。您可以使用名为on的方法注册事件侦听器,并使用emit调度事件。这些函数存储在一个数组中:



var EventEmitter = function () {
  this._events = {};
};

EventEmitter.prototype.on = function (event, listener) {
  if (!this._events.hasOwnProperty(event)) {
    this._events[event] = []; // stores the listeners bound to the event's name
  }
  this._events[event].push(listener); // add the listener to the event's listeners array
};

EventEmitter.prototype.emit = function (event) {
  var args = Array.slice(arguments, 1);
  if (this._events.hasOwnProperty(event)) {
    this._events[event].forEach(function (listener) {
      listener.apply(null, args);
    });
  }
}

var emitter = new EventEmitter();

// push the first function to the array
emitter.on('event-a', function (data) {
  console.log('Event A was fired!');
});

// push the second function to the array
emitter.on('event-a', function (data) {
  console.log('Second listener to event A');
});

emitter.on('event-b', function (a, b, c) {
  console.log('Event B:', a + b + c);
});

emitter.emit('event-a');
setTimeout(function () {
  emitter.emit('event-b', 2, 3, 4);
}, 1500);




这就是为什么我会在某些情况下使用它。我不认为这是不好的做法。