Babel - IE8继承了Object.create的问题

时间:2017-04-04 20:03:41

标签: javascript internet-explorer-8 ecmascript-6 babeljs babel-polyfill

不幸的是,我需要处理IE8的兼容性噩梦,经过几个小时的麻烦,一个接一个地解决问题我希望有人可以帮助我。

Babel通过此方法实现继承:

function _inherits(subClass, superClass) {
    if ("function" != typeof superClass && null !== superClass) throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
    subClass.prototype = Object.create(superClass && superClass.prototype, {
        constructor: {
            value: subClass,
            enumerable: !1,
            writable: !0,
            configurable: !0
        }
    }), superClass && (Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass);
}

当我在IE8上运行此代码时,我收到此错误:Object doesn't support this property or method引用了Object.create的使用

我试图寻找一个插件和Babel的不同设置,但无法找到实际解决它的东西。

有人知道如何处理吗?

2 个答案:

答案 0 :(得分:0)

尽可能简单:所有浏览器都不提供Object.create(IE< 10,旧版Opera和Chrome版本)

答案 1 :(得分:0)

我通过创建这个简单的polyfill来解决这个问题:

ember build --environment=production

参考:Object.create not supported in ie8

我评论了if (!Object.create) { Object.create = function(o, properties) { if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o); else if (o === null) throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument."); //if (typeof properties != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument."); function F() {} F.prototype = o; return new F(); }; } 行,因为如果没有,我会收到以下错误:

  

这个浏览器的Object.create实现是一个垫片而且没有   支持第二个论点。

我认为这不太安全,因为如果某个消费者会将其与第二个参数(if (typeof properties != 'undefined'))一起使用,则可能会导致意外行为,但对于我的用例,它还可以。< / p>

到目前为止一切顺利。