鍍金池/ 問答/HTML/ js原型鏈函數(shù)覆蓋問題

js原型鏈函數(shù)覆蓋問題

同一個原型鏈函數(shù),傳入不同參數(shù),得出不同的結(jié)果,但后一個函數(shù)覆蓋了前一個函數(shù),兩個函數(shù)輸出相同的結(jié)果,此為排序的示例,排序優(yōu)先級為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);

單獨運行兩個函數(shù)是沒問題的,不知道哪里出了問題,原型鏈還沒有吃透

回答
編輯回答
撥弦

這不是函數(shù)覆蓋的問題,是活動對象仍處于激活狀態(tài)的原因。最常見的例子是異步請求的數(shù)據(jù)先打印到控制臺上,在進行一系列的操作,打印到控制臺上的是操作后的結(jié)構(gòu)。

你這里代碼改下就可以看到效果了

if(str == 1){
    console.log(JSON.parse(JSON.stringify(arr.sort(upsort("age","sex","id")))));
}else if(str == 2){
    console.log(JSON.parse(JSON.stringify(arr.sort(downsort("age","sex","id")))));
}

另外,你兩種排序的方法有一點小錯誤:return res2;這里應(yīng)該先判斷是否為0,再進行return

2017年3月22日 14:56