日期:2014-05-16  浏览次数:20393 次

新手求讲解。。。
<script>
var x = new Array();
var y = new Array();
Array.prototype.add = function(a) {  
var l = this.length;  
for (var i = 0; i < a.length; i++)  
this[l + i] = a[i]; 
}
x[1] = 1;
x[2] = 2;
y[10] = 100;

x.add(y);

document.write(x[13]);

</script>

为何输出为:100;求高手讲解。。。

------解决方案--------------------
JS中数组的长度是所占空间的最大长度,比如
var y = new Array();
alert(y.length); // 0,因为数组还没有任何元素
y[10] = 100;
alert(y.length); // 11,因为y[10]已有元素,则y[0]~y[9]都占空间,为undefined
理解这一点之后再看x.add(y)
add方法是自定义的扩展方法,调用的对象是一个Array,参数是另一个数组
执行x.add(y)
var l = this.length; this是调用的对象,也就是x。因为x[2]已经赋值,所以var l = this.length = 3.
for循环中,a是传入参数,也就是y,那么a.length = 11.
于是循环体就相当于
for (var i = 0; i < 11; i++)
x[3 + i] = y[i];
所以x[13]=y[10]=100.