Javascript函数Arguments对象神奇地成为当前的webpack模块?

时间:2017-01-12 21:48:29

标签: javascript reactjs webpack redux react-redux

我正在使用Redux和mapDispatchToProps函数构建一个React应用程序 - 我使用下面的模式。

const mapDispatchToProps = (dispatch) => {
  debugger
  Object.keys(actions).forEach(key => {
    var functionObj = actions[key];
    actions[key] = () => {
      debugger
      var zz = Array.prototype.slice.call(arguments);
      dispatch(functionObj.apply(null,zz));
    }
  });

  return actions;
}

什么驱使我香蕉是争论对象是我期望它(数组像参数bla bla的对象)除非我"使用"它以任何方式。通过"使用"我的意思是:

将其分配给某些内容(如上面的var zz)或将其传递给函数。当我"使用" arguments对象 - 它神奇地成为我目前所在的Webpack模块。

有人对此有所了解吗?我疯了吗?

1 个答案:

答案 0 :(得分:4)

这是由箭头函数do not provide an arguments object引起的。所以你引用了module wrapper function,这是最近的非箭头函数。

您可以使用rest parameters来解决此问题。好摆脱! Rest参数是一个真正的数组,不需要用任何Array#slice()无意义转换。

下面是一个示例,我还使用spread operator来避免使用Function#apply(),因为您似乎不需要任何特殊的this值。< / p>

const mapDispatchToProps = (dispatch) => {
  debugger
  Object.keys(actions).forEach(key => {
    var functionObj = actions[key];
    actions[key] = (...zz) => {
      debugger
      dispatch(functionObj(...zz));
    }
  });

  return actions;
}