You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:如何实现Line类构造函数以接收Card类对象

嘿,作为JS新手能想到这种灵活的构造函数需求很棒!我来给你两种实现方案,分别对应不同的校验需求场景~

首先先确认下我们基于的Card类示例(方便你对照):

class Card {
  constructor(color, number) {
    this.color = color;
    this.number = number;
  }
}

方案一:宽松兼容型(自动处理无效输入)

这个方案会自动过滤掉非Card实例的参数,并且最多保留前4个有效Card,即使你不小心传多了也不会出错:

class Line {
  constructor(...cards) {
    // 只保留Card实例的参数
    const validCards = cards.filter(card => card instanceof Card);
    // 限制最多4个Card
    this.cards = validCards.slice(0, 4);
  }
}

用法示例

// 0个Card的情况
const line0 = new Line();
console.log(line0.cards); // 输出:[]

// 2个Card的情况(就是你想要的用法)
const card1 = new Card('红', 5);
const card2 = new Card('蓝', 3);
const line1 = new Line(card1, card2);
console.log(line1.cards); // 输出:[Card { color: '红', number: 5 }, Card { color: '蓝', number: 3 }]

// 传超过4个Card的情况(自动截断)
const card3 = new Card('绿', 7);
const card4 = new Card('黄', 2);
const card5 = new Card('黑', 1);
const line2 = new Line(card1, card2, card3, card4, card5);
console.log(line2.cards.length); // 输出:4

// 混入非Card参数的情况(自动过滤)
const line3 = new Line(card1, '不是Card', 123);
console.log(line3.cards); // 输出:[Card { color: '红', number: 5 }]

方案二:严格校验型(不符合要求直接报错)

如果你希望确保传入的参数必须全是Card实例,且数量不能超过4个,那可以用这个严格版本,不符合条件会直接抛出错误,方便你快速排查问题:

class Line {
  constructor(...cards) {
    // 校验每个参数都是Card实例
    for (const card of cards) {
      if (!(card instanceof Card)) {
        throw new Error(`传入的参数不是Card实例:${card}`);
      }
    }

    // 校验数量不超过4个
    if (cards.length > 4) {
      throw new Error(`最多只能传入4个Card,你传了${cards.length}个`);
    }

    // 把有效Card存到实例上
    this.cards = [...cards];
  }
}

用法示例

const card1 = new Card('红', 5);
const card2 = new Card('蓝', 3);

// 正常用法
const lineValid = new Line(card1, card2); // 没问题

// 传非Card参数会报错
// const lineInvalid1 = new Line(card1, '错误参数'); // 抛出错误:传入的参数不是Card实例:错误参数

// 传超过4个会报错
// const lineInvalid2 = new Line(card1, card2, card3, card4, card5); // 抛出错误:最多只能传入4个Card,你传了5个

两种方案可以根据你的实际需求选,新手的话先用方案一比较省心,等后续需要严格校验了再换成方案二就好~

内容的提问来源于stack exchange,提问作者user9758730

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:13