0

不幸的是,我需要处理 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 methodObject.create

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

有人知道如何处理吗?

4

2 回答 2

0

尽可能简单:Object.create 并非在所有浏览器中都可用(IE < 10,较旧的 Opera 和 Chrome 版本)

于 2017-04-04T23:31:18.430 回答
0

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

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

参考:ie8 不支持 Object.create

我评论了这一if (typeof properties != 'undefined')行,因为如果没有,我会收到以下错误:

此浏览器的 Object.create 实现是一个 shim,不支持第二个参数。

我认为这不太安全,因为如果某些消费者将它与第二个参数 ( properties) 一起使用,它可能会导致意外行为,但对于我的用例来说没关系。

到目前为止,一切都很好。

于 2017-04-05T13:10:17.130 回答