js组合继承

 //写一个自己的类,返回去重后的对象数组和最大的id的值。(方法自己选择,推荐学习下es6的class,extends方法),这里我们就用组合继承的方式来写
    //纯属个人喜欢这种组合方式(不过复制了两次父类在这里插入代码片方法,略显重复,不打紧),当然用寄生组合自然更好一点(避免复制两次),似乎没必要
   let _arr = [
      { id: 1 },
      { id: 2 },
      { id: 3 },
      { id: 1 },
      { id: 2 },
      { id: 4 },
    ]; 
    //需要去重的对象数组
    //定义父类
    function parent() {
      this._obj = {};
      this._arr = [];
    }
    //父类原型方法(去重对象数组)(不放在构造函数内是避免多次反复复制)
    parent.prototype._getNewArr = function (arr, key) {
      console.log(this._obj, this._arr);
      this.arr = arr;
      this.arr.reduce((pre, cur, index) => {
        this._obj[cur[key]] ? "" : this._arr.push(cur),
          (this._obj[cur[key]] = true);
      }, {});
      return this._arr;
    };
    //定义子类
    function child(arr) {
      parent.call(this); //理解成相当于复制了父类构造函数中的属性到这里(这里可以避免单独的原型链继承方式,父类构造函数内引用属性被所有子类实例共享的问题)
      //子类自有方法(取最大id的值)
      this._getMaxId = function (arr, key) {
        let _arr = Array.from(new Set(this.arr.map((item) => item[key])));
        return Math.max(..._arr);
      };
    }
    child.prototype = new parent(); //这里其实重新复制了父类的属性到子类原型,包括父类原型上的方法(_getNewArr)
    let getNoCfArray = new child(); //创建子类实例
    console.log(getNoCfArray._getNewArr(_arr, "id")); //[{id:1},{id:2},{id:3},{id:4}]
    console.log(getNoCfArray._getMaxId(_arr, "id")); //4
//以上代码可直接复制运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值