2016-12-05 53 views
1

MooTools是overridding陣列原型,並且問題是,這種原型和我有外部。js(即我不能手動修改庫)使用迭代for(i in someArray)並且拋出異常,由於現在Array有更多的屬性。任何想法如何克服這個問題?我正在考慮從Mootools庫本身的數組中移除這些屬性,但看起來並不那麼容易。MooTools的和數組原型

+0

如果您可以修改您所使用的庫,你應該加上'如果(someArray.hasOwnProperty(我)!)繼續;'這些for循環。在這裏看到:http://stackoverflow.com/q/2040042/995958 –

+0

'爲(我的someArray)如果(someArray.hasOwnProperty(I)){/ *你的代碼* /}' – ixpl0

+0

相關:爲什麼在用「爲...在」與數組迭代一個壞主意?](http://stackoverflow.com/q/500504/4642212) – Xufox

回答

3

首先,您應該在陣列上使用常規for(var i=0; i < arr.length; i++) { var el = arr[i]; }循環。

如果您真的需要for..in,並且您在現代瀏覽器中工作,那麼您可以修改原型的修改以使其不可枚舉。

//Logger function 
 
function logArray(arr) { 
 
    console.log("--TEST-START--"); 
 
    for (var i in arr) { 
 
     console.log(arr[i]) 
 
    } 
 
    console.log("--TEST-END--"); 
 
    } 
 
    //Modify prototype 
 
Array.prototype.a = { 
 
    b: 0 
 
}; 
 
//List to test against 
 
var list = [1, 2, 3, 4]; 
 
//Log initial list 
 
logArray(list); 
 
//Modify prototype modificiation 
 
Object.defineProperty(Array.prototype, 'a', { 
 
    enumerable: false 
 
}); 
 

 
//Log initial list 
 
logArray(list);

+1

是的,這是正確的解決方案還沒有我希望的mootools做這個擺在首位的時候都添加新的方法到'Array.prototype()'。 – Redu

+0

@Emil謝謝,它解決了我的問題。 :) – Tito