2013-12-16 32 views
0

我在ASP.NET webforms中使用Crystal Reports來顯示一些報告文件。該框架生成一些用於UI邏輯的JavaScript。修改Array.prototype導致其他js庫中的錯誤

取消精縮版(使用美化):http://pastebin.com/uryjRZF7

困擾我的事情是,當我做任何修改到數組原型,上面的腳本拋出2個錯誤。它看起來像這樣在Firebug(是的,我知道,但在這一點上,我不能未再壓縮它):

TypeError: E[D].getHTML is not a function

...conWidget("iconMenu_icon_"+C,B,IconMenuWidget_iconClickCB,K,F,J,G,P,L,A,N,false)...

TypeError: A.layer is null

...conWidget("iconMenu_icon_"+C,B,IconMenuWidget_iconClickCB,K,F,J,G,P,L,A,N,false)...

例如,這將使中出現錯誤:

if(!Array.prototype.somethingVeryUnique) { 

    Array.prototype.somethingVeryUnique = function() { 

     return this.length; 
    }; 
} 

這怎麼可能干擾自動生成的文件?

更新:

Object.defineProperty(Array.prototype, "somethingUnique", { 
    enumerable: false, 
    writable: true, 
    value: function() { 

    } 
}); 

如果我讓它不可枚舉,它的工作原理。但是,object.defineProperty在我需要支持的IE7中不起作用。

有沒有辦法讓一個不可枚舉的財產沒有它?

+0

@ Qantas94Heavy你是什麼意思的非過濾? – Johan

+0

查看@ HMR的答案,這就是我的意思。由於你改變了你的問題,它現在似乎是[ES5中的Object.defineProperty?](http://stackoverflow.com/questions/3830800/object-defineproperty-in-es5):( –

+0

@ Qantas94Heavy那麼,其中一部分是,但我不會稱之爲笨蛋 – Johan

回答

1

他們可能使用for(something in array)和原型添加成員將顯示,如果你不檢查array.hasOwnProperty(something);最好是not extend native JS objects

+0

擴展本地類型可以歸結爲個人喜好,擴展Object * *不好,但是String,Array等可能是有用的在我的選擇中,但我想你對循環是正確的,謝謝 – Johan

相關問題