Javascript函数Arguments对象神奇变成当前webpack模块?

The*_*ski 2 javascript reactjs webpack redux react-redux

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

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;
}
Run Code Online (Sandbox Code Playgroud)

让我抓狂的是,参数对象正是我所期望的(带有参数 bla bla 的类似数组的对象),除非我以任何方式“使用”它。我所说的“使用”是指:

将其分配给某些东西(如上var zz)或将其传递给函数。当我“使用”参数对象时 - 它神奇地变成了我当前所在的当前 Webpack 模块。

有人对这个有了解吗?我疯了吗??

Set*_*day 5

这是由于箭头函数不提供arguments对象造成的。因此,您正在引用模块包装函数,它是最接近的非箭头函数。

您可以使用剩余参数来解决此问题。骑得好!其余参数是一个真正的数组,不需要用任何Array#slice()废话进行转换。

下面是一个示例,其中我还使用了扩展运算符来避免使用Function#apply(),因为您似乎不需要任何特殊this值。

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

  return actions;
}
Run Code Online (Sandbox Code Playgroud)

  • 我的天啊。呃。你应该得到一个大大的吻。你别无选择,就过来吧。 (5认同)
  • 我知道,一开始这并不直观。休息参数最终将成为第二天性,我们将忘记“争论”及其所有恶作剧。 (2认同)