javascript - IE不支持方法 'assign',怎么办

标签 javascript jquery internet-explorer babeljs

我有一个小的/javascript,Babel 脚本,它在 Chrome 和 Firefox 浏览器中运行良好,但在 Internet Explorer 11 中运行失败。

我希望有人能帮助我。

这是我的功能:

getDaysWithEvents() {
    // Get all the days in this months calendar view
    // Sibling Months included
    const days = this.getCalendarDays();

    // Set Range Limits on calendar
    this.calendar.setStartDate(days[0]);
    this.calendar.setEndDate(days[days.length - 1]);

    // Iterate over each of the supplied events
    this.props.events.forEach((eventItem) => {

        const eventStart = this.getCalendarDayObject(eventItem.start);
        const eventEnd = this.getCalendarDayObject(eventItem.end);
        const eventMeta = this.getEventMeta(days, eventStart, eventEnd);

        if (eventMeta.isVisibleInView) {
            const eventLength = eventMeta.visibleEventLength;
            const eventSlotIndex = days[eventMeta.firstVisibleDayIndex].eventSlots.indexOf(false);
            let dayIndex = 0;

            // For each day in the event
            while (dayIndex < eventLength) {
                // Clone the event object so we acn add day specfic data
                const eventData = Object.assign({}, eventItem);

                if (dayIndex === 0) {
                     // Flag first day of event
                    eventData.isFirstDay = true;
                }

                if (dayIndex === eventLength - 1) {
                    // Flag last day of event
                    eventData.isLastDay = true;
                }

                if (!eventData.isFirstDay || !eventData.isLastDay) {
                    // Flag between day of event
                    eventData.isBetweenDay = true;
                }

                // Apply Event Data to the correct slot for that day

                days[eventMeta.firstVisibleDayIndex + dayIndex].eventSlots[eventSlotIndex] = eventData;

                // Move to next day of event
                dayIndex++;
            }
        }
    });

    return days;
}

错误:

SCRIPT438: The object does not support the property or method 'assign'

这一行有错误:var eventData = Object.assign({}, eventItem);

我可以重写这一行吗?

如何解决?

最佳答案

IE 不支持 Object.assign()

使用polyfil

    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;
  };
}

如果你正在使用 babel

npm install --save-dev babel-plugin-transform-object-assign

使用.babelrc

{
  "plugins": ["transform-object-assign"]
}

你可以找到其他方法here

关于javascript - IE不支持方法 'assign',怎么办,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44244468/

相关文章:

javascript - 使用 Javascript 显示和隐藏多个字段

javascript - 如何在 jQuery 中创建一个数组来保存每个帖子的值?

java - gwt 2.4.0 空白页仅适用于 IE

javascript - 单击事件未在子 div 中捕获

javascript - 在 Firefox 和 Internet Explorer 中使用 XPath 选择 HTML 元素的不同结果

javascript - 既然 $.browser 已被弃用,我如何使用 jQuery 检测 IE 8?

javascript - 如何在页面中的Javascript文件上跟踪或记录Javascript错误?

javascript - 在 FabricJs 中使用 localStorage 对象重绘 Canvas

javascript - 尝试读取 JSP 时出错(500 内部服务器错误)

javascript - 比较两个自定义格式日期jquery