在JavaScript中处理可变参数的模式

时间:2014-11-25 17:59:23

标签: javascript design-patterns variadic-functions

在处理JavaScript中的可变参数时,我通常会执行以下操作:

var f = function() {
  var args = Array.prototype.slice.call(arguments, 0);
  // ...
  return something;
};

但是要做什么呢?

var f = function() {
  return (function(self, args) {
    // ...
    return something; 
  }(this, Array.prototype.slice.call(arguments, 0)));
};

我无法轻易找到解决上述模式的任何内容,因此我决定将其发布在此处。在我开始尝试之前,我想知道是否存在任何缺陷或风险在使用上述相当不寻常的模式时我可能会丢失。

1 个答案:

答案 0 :(得分:0)

我发现这个模式的可读性略低于第一个模式,但是它让我可以在不声明变量的情况下编写更长的单行,因此我越来越喜欢它。

  Object.defineProperty(RegExp, 'join', {
    value: function() {
      return (function(regexes, last) {
        return RegExp(regexes.map(function(item) {
          return item.source;
        }).reduce(function(prev, next) {
          return prev + next;
        }), last.slice(last.lastIndexOf('/') + 1));
      }(Array.prototype.slice.call(arguments, 0),
      arguments[arguments.length - 1]+''));
    }, enumerable: false
  });