不幸的是,我需要处理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的不同设置,但无法找到实际解决它的东西。
有人知道如何处理吗?
答案 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>
到目前为止一切顺利。