Mik*_*ike 6 javascript object internet-explorer-8
我只在IE8中收到此错误消息,我不知道如何转换现有的IE8兼容性功能.
Run Code Online (Sandbox Code Playgroud)_initEvents : function() { var self = this; Array.prototype.slice.call(this.menuItems).forEach(function(el, i) { var trigger = el.querySelector('a'); if (self.touch) { trigger.addEventListener('touchstart', function(ev) { self._openMenu(this, ev); }); } else { trigger.addEventListener('click', function(ev) { self._openMenu(this, ev); }); } }); window.addEventListener('resize', function(ev) { self._resizeHandler(); }); },
以上只是其中的一部分,我不认为其余的是需要的.错误发生在这里:
Run Code Online (Sandbox Code Playgroud)Array.prototype.slice.call( this.menuItems )
你打电话的时候:
this.menuItems = this.el.querySelectorAll( '.cbp-hsmenu > li' );
Run Code Online (Sandbox Code Playgroud)
分配给menuItems的对象是静态NodeList,它是一个宿主对象.然后你做的时候:
Array.prototype.slice.call( this.menuItems )
Run Code Online (Sandbox Code Playgroud)
您调用与主机对象作为一个内置的方法这个.在IE 8及更低版本(以及可能还有很多其他旧版浏览器)中,你不能这样做(没有规范说你应该,尽管现代浏览器允许你).
简单的解决方案是使用除调用之外的其他方法将menuItems转换为数组,或者为Array.prototype.forEach添加填充程序并使用CrazyTrain的建议:
Array.prototype.forEach.call(this.menuItems, func...)
Run Code Online (Sandbox Code Playgroud)
因为在没有内置forEach的浏览器中,它将是一个本机方法并且工作得很好.但是对于健壮的代码,用简单的for循环替换所有这些代码.
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |