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

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