在JavaScript中,通过prototype扩展内置对象会导致一个问题,看看下面的例子:
Object.prototype.extendFn = function(){ return false; } var a = { "aa" : "1" } for( var i in a ){ //这时会遍历出"aa"和"extendFn" alert(i); }
在这个例子中,我们通过 prototype 为 Object 扩展了一个名为 extendFn 的方法,接着创建了一个对象 a ,在试图遍历该对象的时候,刚才扩展的 extendFn 也被遍历出来,并且在IE(6,7,8)中,扩展的方法被首先遍历到。
如果是重写方法,则不会出现这种情况:
Object.prototype.toString = function(){ return false; } var b = { "bb" : "1" } for( var i in b ){ //只有"bb"被找到 alert(i); }
在团队协作开发中,应该尽量避免对内置对象进行直接扩展,不仅可能导致类似这样的问题,还有一点在于其他团队成员也许并不知道你进行了这些扩展从而带来种种问题。