我们有时在处理数组时会扩展内置对象Array,但这样会有一些问题,现在举例解决一下。
var array = [1,2,3,4]; for(var i in array){ print(array(i)); } // 1 // 2 // 3 // 4
现在我们扩展了内置对象Array,
Array.prototype.add = function(){};
现在我们再次执行上面的 for..in 循环,会得到如下结果:
// 1 // 2 // 3 // 4 // function(){}
这个不是咱们想要的结果,如果对其进行sum操作就会出现,莫名其妙的错误,并且难以调试出来,但是问题总是会有解决方法的,继续往下看。
for(var i = 0,len = array.length;i<len;i++){ print(array(i)); } // 1 // 2 // 3 // 4
这种方式最重要的是它通过访问array的length属性来完成循环(数组内部元素的访问),而不是访问array对象上的其他属性(即:function,其下标是“add” 是一个属性)。
这样就可以得到我们预期的结果了,但通过这个例子看到,我们除非必要尽量的不要扩展内置对象,同时也给继承链添加了“烙印”,这样其实就是给bug提供了温床。
通过这个例子我的收获是:温故而知新,之前看到这个的时候并没有太大的体会与理解,现在遇到了问题,然后返回头来看到这个例子,问题解决了同时也加深了对数组操作的理解。
其实数组的操作没有想象中的那么简单,只是看似简单(增,删,改,查),实则不易啊,数组操作值得好好的研究,最后望大家看过这篇博客有所收获。