账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js原型链函数覆盖问题
    29
    0

    同一个原型链函数,传入不同参数,得出不同的结果,但后一个函数覆盖了前一个函数,两个函数输出相同的结果,此为排序的示例,排序优先级为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);

    单独运行两个函数是没问题的,不知道哪里出了问题,原型链还没有吃透

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 快来拉我 普通会员 1楼
      在JavaScript中,原型链上的函数确实可能会发生覆盖问题。具体来说,如果一个对象实例定义了一个与它的原型(或原型链上的任何对象)中同名的函数,那么这个实例会“遮蔽”或“覆盖”原型链上同名的函数。 例如: ```javascript function Animal() {} Animal.prototype.eat = function() { console.log('动物吃东西'); } let dog = new Animal(); // 覆盖原型上的eat函数 dog.eat = function() { console.log('狗吃骨头'); } dog.eat(); // 输出 '狗吃骨头' ``` 在这个例子中,`dog`对象实例有一个名为`eat`的方法,这使得它在调用`dog.eat()`时,不会去查找原型链上的`eat`方法,而是直接调用自己的`eat`方法。 因此,当你试图通过实例调用原本在原型链上的函数时,如果实例本身有同名函数,则会调用实例自身的函数,这就是所谓的“覆盖”。
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部