解决IE浏览器object.assign方法不支持的问题

原创 Dean 博文,工作笔记 二维码阅读
2019-04-03 17:09

在日常码代码的过程中,我们经常会遇到需要合并对象的情况,如果在可以使用npm包的情况下,我们可以直接导loadsh包中的merge方法,一切都很美好,就算不能使用npm包,我们也可以通过使用object.assign这个方法来作为替代,一切似乎也挺好的,但是当我们将代码放到万恶的IE浏览器上运行的时候,发现该方法失效了,得到了如下错误:

错误说IE上Object对象上不存在assign方法,查一下兼容性

what's the fuck,除了edge外, 该方法在IE所有其他版本上上竟然完全没有得到支持,但是大部分浏览器都已经支持了这个方法,为了IE一个浏览器而放弃一个使用一个已被其他浏览器厂商广泛支持的原生浏览器方法未免得不偿失,竟然IE上Object上不存在assign方法,那么我们为啥不能直接给他造一个这个方法呢?以下代码演示了如何向IE的Object身上添加assign方法。

if (typeof Object.assign != 'function') {
  Object.assign = function(target) {
    'use strict';
    if (target == null) {
      throw new TypeError('Cannot convert undefined or null to object');
    }

    target = Object(target);
    for (var index = 1; index < arguments.length; index++) {
      var source = arguments[index];
      if (source != null) {
        for (var key in source) {
          if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key];
          }
        }
      }
    }
    return target;
  };
}

其实这种hack方式对于很多其他浏览器支持但是IE不支持的方法都适用,如果遇到IE上方法不能使用的问题,不放参考上面的方式去修正。

本文地址:https://www.deanhan.cn/ie-object-assign-bug.html
版权声明:本文为原创文章,版权归 Dean 所有,欢迎分享本文,转载请保留出处!
  • 支付宝二维码 支付宝
  • 微信二维码 微信