永发信息网

js原型链函数覆盖问题

答案:1  悬赏:10  手机版
解决时间 2021-11-11 10:56
js原型链函数覆盖问题
最佳答案
function(str = this.str)这里有语法错误。
sp.sortWay();//这个调用没有传入参数,由于判断是升序还是降序不是用this.str来做判断的,所以不能确定是降序还是升序。
sp2.sortWay(2);//sp2没有声名
另外排序函数可以精简
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() {
    var sortColumns = arguments;
    
    return function (a, b) {
        if (sortColumns.length == 0) {
            return a - b;
        }

        for (var i = 0; i < sortColumns.length; i++) {
            var compareResult = a[sortColumns[i]] - b[sortColumns[i]];
            if (i == sortColumns.length - 1 || compareResult != 0) {
                return compareResult;
            }
        }
    }
}

//2.降序
function downsort() {
    var sortColumns = arguments;

    return function (a, b) {
        if (sortColumns.length == 0) {
            return b - a;
        }

        for (var i = 0; i < sortColumns.length; i++) {
            var compareResult = b[sortColumns[i]] - a[sortColumns[i]];
            if (i == sortColumns.length - 1 || compareResult != 0) {
                return compareResult;
            }
        }
    }
}

function sortPlugin() { }
sortPlugin.prototype.str = 1; //1为升序,2为降序,默认为升序
sortPlugin.prototype.sortWay = function (str) {
    if (str != undefined) {
        this.str = str;
    }
    
    if (this.str == 1) {
        console.log(JSON.stringify(arr.sort(upsort("age", "sex", "id")))); //如果不转换为JSON字符串就输出,打印到console的结果将在鼠标点击展开的时候去获取,导致第一次调用和第二次调用都显的最后一次调用的结果
    } else if (this.str == 2) {
        console.log(JSON.stringify(arr.sort(downsort("age", "sex", "id"))));
    }
}

var sp = new sortPlugin();
sp.sortWay(1);
sp.sortWay(2);这样写多个属性排序还不够完善,只能统一按升序或降序来排,还不能每个属性都按不同的排序,比如first属性按升序,second属性按降序,还可以进一步的优化。可以思考下如何实现类似C#里Linq排序,比如:
arr.orderBy(x => x.first).thenByDescending(x => x.second);
或者
arr.orderByDescending(x => x.first).thenBy(x => x.second);追问多谢大佬花时间解答,function(str = this.str)这样写没有问题,个人感觉加
if (str == undefined) { this.str = str; }
是为了更严谨,逻辑更清晰,另外如果输出结果不转换为JSON字符串,是什么机制导致鼠标点击才去获取,我的问题是出在这儿的,郁闷了好长时间
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
红烧田螺怎么做
去年护师一门都没过,今年怎么报名?是直接报
尘埃2开始提示没有光盘
微粒贷有7000怎么提额度呢?我想提高到3万
菁英教育中小学培训地址在什么地方,想过去办
无美术基础 从高一开始学美术 来得及吗
现浇混凝土是应该找什么人做?
急求湖南英语三级答案
求梦回还日文歌词罗马音!谢谢~
常见的网站遭攻击方式有哪些
MITx项目解决的痛点是什么
我用maya建模如何。快速把大于4边面换成 4边
1991.10.14女,周鑫鑫和周欣欣哪个名字好?多
黑脱先 什么意思 围棋里面的
1977年文及万出生命运求带画像
推荐资讯
月婆可以吹风扇吗
长50米宽8米的温室安装滴灌设施,请计算支管
A (t ) is necessary on Thankgiveing Day
晟嘉教育(小白楼分校)地址在什么地方,我要处
POPPIN中做POP时要怎么找爆点的感觉?
用多姿多彩写一个感叹句和反问句
4100的凯马柴油机机器是多大马力?
小孩子上幼儿园需要取个英文名,
苏东坡诗词水调歌头全文
富乐山九洲国际酒店-8号楼-洗手间地址在哪,
号码864开头的是哪里的
求夏有乔木电影百度云资源
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?