我正在开发第三方窗口小部件,而我的js使用原生reduce功能。
但是,当我放入客户页面时,它有原型1.6.0.3库,它会覆盖reduce函数,完全出乎意料。
我怎样才能让我的JS使用原生还原?
由于
答案 0 :(得分:1)
扩展Florent的评论:
<script type="text/javascript">
Array.prototype.nativeReduce = Array.prototype.reduce;
</script>
<script type="text/javascript" src="/path/to/prototype.js"></script>
现在您可以像这样调用本机reduce方法:
var x = [];
x.nativeReduce(...);
如果您无法控制导入脚本的顺序,那么iframe
可能会起到至少再次访问本机reduce
功能的作用。
(function (document) {
var iframe = document.createElement("iframe");
iframe.src = "about:blank";
iframe.style.display = "none";
document.documentElement.appendChild(iframe);
var reduce = iframe.contentWindow.Array.prototype.reduce;
// Rest of your script goes here
var arr = [1, 2, 3];
reduce.call(arr, function() { ... });
})(this.document);
答案 1 :(得分:0)
我找到的解决方案是使用https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
中实现的.reduce函数并将其重命名为reduceExt,以免弄乱所有者页面中的现有库。