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

Pav*_*vel 5 javascript babel webpack babeljs

我设置了webpack + babel配置

webpack.config.js

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

.babelrc

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

在谷歌C​​hrome中一切都还可以,但在IE 11i中有错误

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

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

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


Sta*_*rov 0

看来babel编译不行。 Object.assign是 ECMAScript 2015 功能,chrome 无需编译即可支持它。