使用原生reduce而不是原型1.6.0.3 reduce

时间:2013-12-20 13:08:31

标签: javascript prototypejs

我正在开发第三方窗口小部件,而我的js使用原生reduce功能。

但是,当我放入客户页面时,它有原型1.6.0.3库,它会覆盖reduce函数,完全出乎意料。

我怎样才能让我的JS使用原生还原?

由于

2 个答案:

答案 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,以免弄乱所有者页面中的现有库。