Object.prototype.toString = function(){
    var str = [];
    for (var i in this){
        str.push(i+':'+this[i]);
    }
    return str.join(',');
};
var arr = [{key:3,value:"three"},{key:1,value:"one"},{key:2,value:"two"}];
arr.sort(function(a,b){
    return a.key - b.key;
});
alert(arr);
问题1:在这段代码中给全局对象添加了一个toString方法,这个方法有什么用么?for循环是如何循环数组str里面的对象的?
问题2:在arr这个数组里面是有三个对象么?{key:3,value:"three"},{key:1,value:"one"},{key:2,value:"two"}
问题3:return a.key - b.key;这个是如何排序的?

解决方案 »

  1.   

    问题1:toString方法是定义给object的原型上面的,意思是object的每个实例默认拥有这个方法的使用权利。
            通过循环这个对象里面的属性,将每一个属性都加入到str这个数组中去,,最后在返回将每个选项用,号连接起来返回去一个字符串
    问题2:可以这样理解。
    问题三:这个好像是说的是你的排序是升序还是降序,看你的a。key和b.key谁大了
      

  2.   

    首先谢谢你的回答,第二个和第三个问题我明白了,现在重点是第一个问题我可不可以理解成,在数组arr里面的没一个对象都可以使用全局方法,并且这个arr数组本身也可以使用全局方法,那么就是把arr数组里面的每一个对象都放到str数组里面,并且遍历这个数组对吧,我现在的疑问是这个str.push(i+':'+this[i]);是如何push进去的。
      

  3.   

    问题1:Object.prototype.toString 类覆盖了toString方法,因为它要输出{key:3,value:"three"},{key:1,value:"one"},{key:2,value:"two"}这样json格式的数组,所以重写了toString该方法
    将 Array 的元素转换为字符串。结果字符串用逗号分隔,且连接起来,
    for循环是如何循环数组str里面的对象的?
    这里的for也就是循环arr这个数组,至于如何循环,我也不太了解。
    问题2:arr是有3个json对象
    问题3:如这个数组 只看key 那就是[3,1,2]
    第1次 1 -3 1比3小所以得到 [1,3,2]
    第2次 3 -1 1比3小所以得到 [1,3,2]
    第3次 3 -2 2比3小所以得到 [1,2,3]
    第4次 2 -1 1比2小所以得到 [1,2,3]
    第5次 2 -3 2比3小所以得到 [1,2,3]
    你可以调试这个方法监视a.key 和b.key 
    arr.sort(function(a,b){
       return a.key - b.key;
    });