对象不支持属性或方法' assign'

时间:2017-05-06 18:26:48

标签: javascript webpack babeljs babel

我设置了webpack + babel config

webpack.config.js

...
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
...

.babelrc

{
  "plugins": ["lodash", "transform-object-rest-spread"],
  "presets": [
    ["env", {
      "targets": [
        "> 4%",
        "ie 11",
        "safari 8"
      ]
    }],
    "react",
    "react-optimize"
  ],
  "env": {
    "test": {
      "presets": ["es2015", "react"]
    }
  }
}

在Google Chrome中一切正常,但在IE 11i中有错误

  

对象不支持属性或方法'分配'

2 个答案:

答案 0 :(得分:5)

您还需要添加对象分配变换 查看https://babeljs.io/docs/plugins/transform-object-assign/

另请注意,最佳做法是包含polyfill。 MDN通常为ES2015功能提供polyfill代码。查看https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

记录是:

if (typeof Object.assign != 'function') {
  Object.assign = function(target, varArgs) { // .length of function is 2
    'use strict';
    if (target == null) { // TypeError if undefined or null
      throw new TypeError('Cannot convert undefined or null to object');
    }

    var to = Object(target);

    for (var index = 1; index < arguments.length; index++) {
      var nextSource = arguments[index];

      if (nextSource != null) { // Skip over if undefined or null
        for (var nextKey in nextSource) {
          // Avoid bugs when hasOwnProperty is shadowed
          if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
            to[nextKey] = nextSource[nextKey];
          }
        }
      }
    }
    return to;
  };
}

您希望在您的应用中将此代码包含在不支持Object.assign的浏览器中。上面提到的Babel转换插件在构建应用程序而不是库时也推荐了这种方法。

答案 1 :(得分:0)

看起来babel编译不起作用。 Object.assign是ECMAScript 2015功能,chrome支持它而无需编译。