javascript:对Array增加方法造成的坑。

Array.prototype.foo1 = function(){console.log('this-is-in-prototype')}
var a = [];
a.foo2 = function(){console.log('this-is-in-obj')};
a.push(100);
a.push(200);
for (var k in a) {
	console.log(k + ' : ' + a[k]);
}


上面这段代码,输出是这样的:

0 : 100
1 : 200
foo2 : function (){console.log('this-is-in-obj')}
foo1 : function (){console.log('this-is-in-prototype')}


这里不仅输入了数组的内容,也输出了我们自己加上去的方法。那么bug就来了:如果我们用  for (var key in array){}  这种形式遍历数组,就会把foo1、foo2也遍历出来,这显然不是我们想要的。


上面的代码中,a.foo2 = function(){}  这个地方的影响仅限于a本身。但Array.prototype.foo1会影响所有的Array。所以,如果一定要增加方法的话,用a.foo2 = function(){}这种形式可以缩小上面那个问题的影响范围。


另外,对Array的遍历,用a.forEach(function(item, index, thisArray) {...}),或者 for(var n=0; n<a.length; ++n) {...}都不会出现上面那个问题。所以,数组的遍历,推荐用这两种方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值