Javascript 如何使用本机(非重写)方法

Javascript 如何使用本机(非重写)方法,javascript,prototypejs,zepto,Javascript,Prototypejs,Zepto,我的服务没有标准问题 我在客户端站点上的SaaS脚本中使用库Zepto。但两小时前,我的一个客户写信给我,说我的脚本不起作用。我检查了所有代码,发现:他使用的是原型JavaScript框架,版本1.7。在这段代码中,我看到: var Enumerable = (function() { ... function each(iterator, context) {...} function all(iterator, context) {...} ... }(); 我的意思是,所

我的服务没有标准问题

我在客户端站点上的SaaS脚本中使用库Zepto。但两小时前,我的一个客户写信给我,说我的脚本不起作用。我检查了所有代码,发现:他使用的是
原型JavaScript框架,版本1.7
。在这段代码中,我看到:

var Enumerable = (function() {
...
  function each(iterator, context) {...}
  function all(iterator, context) {...}
...    
}();
我的意思是,所有本机数组方法都是重写的。 Zepto.js使用本机方法:

each: function(callback){
    emptyArray.every.call(this, function(el, idx){
        return callback.call(el, idx, el) !== false
    })
    return this
},
在哪里

我认为这个版本的原型库有一些bug,因为(从控制台:)

Zepto的emtyArray.each和Enumerable.all函数有一个圆圈

我的问题是,如何使用方法
[].all
而不是覆盖
[].prototype.all

更新
var words=['hello'、'world'、'!'];
log('Before overwrite');
[]每次调用(字、函数(el、idx){
控制台日志(el);
});
Array.prototype.every=函数(迭代器,上下文)
{
控制台错误(“不工作”);
}
console.log('After overwrite');
[]每次调用(字、函数(el、idx){
控制台日志(el);

});不允许在代码段中使用Iframing,但这是一种有效的变体:

Array.prototype.every = function()
{
  console.log('invalid');
}

var iframe = window.document.createElement("iframe");
window.document.documentElement.appendChild(iframe);
var nativeWnd = iframe.contentWindow;
var nativeArray = nativeWnd.Array;
var parent = iframe.parentNode || iframe.parent;
parent.removeChild(iframe);

var oArr = new Array();
var nArr = new nativeArray();

console.log(oArr.every);
console.log(nArr.every);

不允许在代码段中使用Iframing,但这是有效的变体:

Array.prototype.every = function()
{
  console.log('invalid');
}

var iframe = window.document.createElement("iframe");
window.document.documentElement.appendChild(iframe);
var nativeWnd = iframe.contentWindow;
var nativeArray = nativeWnd.Array;
var parent = iframe.parentNode || iframe.parent;
parent.removeChild(iframe);

var oArr = new Array();
var nArr = new nativeArray();

console.log(oArr.every);
console.log(nArr.every);

两个库中哪一个先加载?原型。我无法在加载此库之前执行类似于
var baseEach=Array.prototype.each
的操作=(你能展示你的代码中导致这个错误的部分吗?链接你的库,提供一个提琴。一些东西来重现/调试这个问题。问题不只是在prototype 1.7中。问题是任何脚本都可以覆盖任何本机函数和方法。我需要找到一些方法来使用这个函数和方法的真正稳定的本机版本。我发现了这一点。)解决方案:两个库中哪一个先加载?Prototype。我不能在加载此库之前执行类似于
var baseEach=Array.Prototype.的操作=(你能展示你的代码中导致这个错误的部分吗?链接你的库,提供一个提琴。一些东西来重现/调试这个问题。问题不只是在prototype 1.7中。问题是任何脚本都可以覆盖任何本机函数和方法。我需要找到一些方法来使用这个函数和方法的真正稳定的本机版本。我发现了这一点。)lution:我很乐意找到不使用iFrame的更好方法。如果有人知道如何在没有iFrame的情况下使用iFrame,请写出来。似乎iFrame就是解决方案。看看,我发现没有理由想避免使用iFrame。有什么理由吗?我很乐意找到不使用iFrame的更好方法。如果有人知道如何在没有iFrame的情况下使用iFramees,请写下来。似乎iframes就是解决方案。看看吧,我觉得没有理由要避免iframes。有什么理由吗?
Array.prototype.every = function()
{
  console.log('invalid');
}

var iframe = window.document.createElement("iframe");
window.document.documentElement.appendChild(iframe);
var nativeWnd = iframe.contentWindow;
var nativeArray = nativeWnd.Array;
var parent = iframe.parentNode || iframe.parent;
parent.removeChild(iframe);

var oArr = new Array();
var nArr = new nativeArray();

console.log(oArr.every);
console.log(nArr.every);