如何使用本机(未覆盖)方法
How to use native (not overwrote) method
我的服务没有标准问题。
我在客户站点上的 SaaS 脚本中使用 Zepto 库。但是 2 小时前,我的一位客户写信给我,说我的脚本不起作用。我检查了所有代码,发现:他使用 Prototype JavaScript framework, version 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
},
哪里
emptyArray = [];
我认为这个版本的原型库有一些错误,因为(来自控制台:)
xxx:xxx Uncaught RangeError: Maximum call stack size exceeded
有Zepto的emtyArray.each和Enumerable.all功能的圆
我的问题是,如何使用方法 [].all
而不是覆盖 [].prototype.all
?
更新
var words = ['hello', 'world', '!'];
console.log('Before overwrite');
[].every.call(words, function(el, idx) {
console.log(el);
});
Array.prototype.every = function(iterator, context)
{
console.error('not works');
}
console.log('After overwrite');
[].every.call(words, function(el, idx) {
console.log(el);
});
如何再次使用原生.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);
我的服务没有标准问题。
我在客户站点上的 SaaS 脚本中使用 Zepto 库。但是 2 小时前,我的一位客户写信给我,说我的脚本不起作用。我检查了所有代码,发现:他使用 Prototype JavaScript framework, version 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
},
哪里
emptyArray = [];
我认为这个版本的原型库有一些错误,因为(来自控制台:)
xxx:xxx Uncaught RangeError: Maximum call stack size exceeded
有Zepto的emtyArray.each和Enumerable.all功能的圆
我的问题是,如何使用方法 [].all
而不是覆盖 [].prototype.all
?
更新
var words = ['hello', 'world', '!'];
console.log('Before overwrite');
[].every.call(words, function(el, idx) {
console.log(el);
});
Array.prototype.every = function(iterator, context)
{
console.error('not works');
}
console.log('After overwrite');
[].every.call(words, function(el, idx) {
console.log(el);
});
如何再次使用原生.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);