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