原型的概念::原型对象里的所有属性和方法 被所有构造函数实例化出来的对象所共享,类似于java中的 static
正因为共享所以单一的操作 就会影响了全局,因此使用时需注意
基于prototype:为数组扩展方法
//获取数组最大值
function getMax(){ var max=this[0]; for(var i=0;i<this.length;i++){ if(max<this[i]){ max=this[i]; } } return max; }
//获取数组最小值 function getMin(){ var min=0; for(var x=0;x<this.length;x++){ if(this[x]<this[min]){ min=x; } } return this[min]; } Array.prototype.getMax=getMax; Array.prototype.getMin=getMin;
作者曾经在js开发时候经常用到数组的排序,以下是作者对数组排序的总结以及其他方法的扩展
var Array={}; Array.sorting = { //利用sort方法进行排序 systemSort: function(arr){ return arr.sort(); }, //冒泡排序 bubbleSort: function(arr){ var len=arr.length, tmp; for(var i=0;i<len-1;i++){ for(var j=0;j<len-1-i;j++){ if(arr[j]>arr[j+1]){ tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } } return arr; }, //快速排序 quickSort: function(arr){ var low=0, high=arr.length-1; sort(low,high); function sort(low, high){ if(low<high){ var mid = (function(low, high){ var tmp = arr[low]; while(low<high){ while(low<high&&arr[high]>=tmp){ high--; } arr[low] = arr[high]; while(low<high&&arr[low]<=tmp){ low++; } arr[high] = arr[low]; } arr[low] = tmp; return low; })(low, high); sort(low, mid-1); sort(mid+1,high); } } return arr; }, //插入排序 insertSort: function(arr){ var len = arr.length; for(var i=1;i<len;i++){ var tmp = arr[i]; for(var j=i-1;j>=0;j--){ if(tmp<arr[j]){ arr[j+1] = arr[j]; }else{ arr[j+1] = tmp; break; } } } return arr; }, //希尔排序 shellSort: function(arr){ console.log(arr); var h = 1; while(h<=arr.length/3){ h = h*3+1; //O(n^(3/2))by Knuth,1973 } for( ;h>=1;h=Math.floor(h/3)){ for(var k=0;k<h;k++){ for(var i=h+k;i<arr.length;i+=h){ for(var j=i;j>=h&&arr[j]<arr[j-h];j-=h){ var tmp = arr[j]; arr[j] = arr[j-h]; arr[j-h] = tmp; } } } } return arr; }, printArray:function (arr){ var str="["; for(var x=0;x<arr.length;x++){ if(x!=arr.length-1){ str+=arr[x]+","; }else{ str+=arr[x]+"]"; } } //alert(str); return str; }, show:function(arr){ for(var x=0;x<arr.length;x++){ for(var y=x+1;y<arr.length;y++){ if(arr[x]>arr[y]){ var temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } } } } }