修改Array.prototype会导致其他js库中的错误

时间:2013-12-16 08:48:30

标签: javascript asp.net crystal-reports

我在ASP.NET网络表单中使用Crystal Reports来显示一些报告文件。该框架生成一些用于UI逻辑的javascript。

未缩小的版本(使用美化):http://pastebin.com/uryjRZF7

困扰我的是,只要我对数组原型进行任何修改,上面的脚本就会抛出2个错误。它看起来像是在萤火虫中(是的,我知道,但我现在无法将其缩小):

  

TypeError:E [D] .getHTML不是函数

     

... conWidget( “iconMenu_icon _” + C,B,IconMenuWidget_iconClickCB,K,F,J,G,P,L,A,N,假)...

     

TypeError:A.layer为null

     

... conWidget( “iconMenu_icon _” + C,B,IconMenuWidget_iconClickCB,K,F,J,G,P,L,A,N,假)...

例如,这会使错误出现:

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中不起作用。

如果没有它,有没有办法制作一个不可枚举的属性?

1 个答案:

答案 0 :(得分:1)

他们可能正在使用for(something in array),如果您未选中array.hasOwnProperty(something);最佳是not extend native JS objects,则会显示添加原型的成员。