同一个原型链函数,传入不同参数,得出不同的结果,但后一个函数覆盖了前一个函数,两个函数输出相同的结果,此为排序的示例,排序优先级为age->sex->id
var arr = [
{"name":"aa","id":1000,"sex":0,"age":28},
{"name":"bb","id":1001,"sex":1,"age":18},
{"name":"cc","id":1002,"sex":0,"age":18},
{"name":"cc","id":1003,"sex":1,"age":18}
];
//1.升序
function upsort(first,second,third){
return function(a,b){
var v1 = a[first];
var v2 = b[first];
var res = v1 - v2;
if(res == 0){
upsort(first,second,third);
var v3 = a[second];
var v4 = b[second];
var res2 = v3 - v4;
return res2;
if(res2 == 0){
upsort(first,second,third);
var v5 = a[third];
var v6 = b[third];
var res3 = v5 - v6;
return res3;
}
}
return res;
}
}
//2.降序
function downsort(first,second,third){
return function(a,b){
var v1 = a[first];
var v2 = b[first];
var res = v2 - v1;
if(res == 0){
downsort(first,second,third);
var v3 = a[second];
var v4 = b[second];
var res2 = v4 - v3;
return res2;
if(res2 == 0){
downsort(first,second,third);
var v5 = a[third];
var v6 = b[third];
var res3 = v6 - v5;
return res3;
}
}
return res;
}
}
function sortPlugin(){}
sortPlugin.prototype.str = 1; //1为升序,2为降序,默认为升序
sortPlugin.prototype.sortWay = function(str = this.str){
if(str == 1){
console.log(arr.sort(upsort("age","sex","id")));
}else if(str == 2){
console.log(arr.sort(downsort("age","sex","id")));
}
}
var sp = new sortPlugin();
sp.sortWay();
sp2.sortWay(2);
单独运行两个函数是没问题的,不知道哪里出了问题,原型链还没有吃透
这不是函数覆盖的问题,是活动对象仍处于激活状态的原因。最常见的例子是异步请求的数据先打印到控制台上,在进行一系列的操作,打印到控制台上的是操作后的结构。
你这里代码改下就可以看到效果了
另外,你两种排序的方法有一点小错误:
return res2;
这里应该先判断是否为0,再进行return